Sunteți pe pagina 1din 6

Tercera Parte - Instalar y configurar un cortafuegos

Para proteger el servidor Linux de accesos no autorizados hay que instalar un firewall (cortafuegos) y
abrir solamente los puertos que Asterisk necesita para aceptar conexiones externas. Esta es la parte ms
delicada de la configuracin del servidor porque es donde se definen los puertos y los servicios que son
accesibles desde Internet. Desde la versin 7.X de CentOS, el programa para gestionar y configurar el
cortafuegos es firewalld. Aunque sea un sistema muy valido, no he encontrado el equivalente de
algunas reglas que utilizaba con IPtables. Es por este motivo que he preferido continuar a utilizar
IPtables. Para utilizar Iptables en CentOS 7.X hay que seguir los siguientes pasos:

Parar firewalld si est corriendo:

systemctl stop firewalld

Desactivar el arranque automatico:

systemctl disable firewalld

Averiguar que todo est bien:

systemctl status firewalld


* firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)

Instalar IPtables:

yum install iptables-services -y

Activarlo para que arranque con el sistema:

systemctl enable iptables


Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.

Mover la configuracin que viene por defecto para crear una nueva:

mv /etc/sysconfig/iptables /etc/sysconfig/iptables.old

Si Asterisk se encuentra instalado en un computador local conectado a Internet a travs de un router


hay dos opciones:

Abrir los puertos desde la pagina de administracin del router.


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

Iptables se encarga de gestionar todos los paquetes que entren y salgan del servidor Linux. Para eso
utiliza 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 parmetros de los paquetes (un ejemplo es
marcar los paquetes para que vengan procesados y enviados con una prioridad ms alta)

Las reglas se definen una por linea y sern procesadas por IPTABLES siguiendo la misma secuencia.

Cuando no se especifica diversamente, todas las reglas aplican a la tabla filter.

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

iptables -A INPUT -i lo -j ACCEPT

Se rechaza (REJECT) todo el trafico entrante dirigido a las IP 127.0.0.0/127.255.255.255 menos los
paquetes 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. Vase protocolo TCP

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

Se dejan pasar todos los paquetes salientes.

iptables -A OUTPUT -j ACCEPT

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

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 bloquea el trafico sobre el puerto 5060 procedente de los ms conocidos programas de escaneo de
servidores SIP utilizados para ataques y fraudes de llamadas. Este puerto se utilizar con el viejo
canal chan_sip:

iptables -A INPUT -p udp -m udp --dport 5060 -m string --string "friendly-scanner" --algo bm -j DROP

iptables -A INPUT -p udp -m udp --dport 5060 -m string --string "sipcli" --algo bm -j DROP

iptables -A INPUT -p udp -m udp --dport 5060 -m string --string "VaxSIPUserAgent" --algo bm -j DROP
iptables -A INPUT -p udp -m udp --dport 5060 -m string --string "sipvicious" --algo bm -j DROP

iptables -A INPUT -p udp -m udp --dport 5060 -m string --string "sundayddr" --algo bm -j DROP

iptables -A INPUT -p udp -m udp --dport 5060 -m string --string "iWar" --algo bm -j DROP

iptables -A INPUT -p udp -m udp --dport 5060 -m string --string "sipsak" --algo bm -j DROP

Se deja pasar todo el trafico en entrada destinado al puerto udp 5060

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

Se bloquea el trafico sobre el puerto 5080 procedente de los ms conocidos programas de escaneo de
servidores SIP utilizados para ataques y fraudes de llamadas. Este puerto se utilizar con el nuevo canal
chan_pjsip:

iptables -A INPUT -p udp -m udp --dport 5080 -m string --string "friendly-scanner" --algo bm -j DROP

iptables -A INPUT -p udp -m udp --dport 5080 -m string --string "sipcli" --algo bm -j DROP

iptables -A INPUT -p udp -m udp --dport 5080 -m string --string "VaxSIPUserAgent" --algo bm -j DROP

iptables -A INPUT -p udp -m udp --dport 5080 -m string --string "sipvicious" --algo bm -j DROP

iptables -A INPUT -p udp -m udp --dport 5080 -m string --string "sundayddr" --algo bm -j DROP

iptables -A INPUT -p udp -m udp --dport 5080 -m string --string "iWar" --algo bm -j DROP

iptables -A INPUT -p udp -m udp --dport 5080 -m string --string "sipsak" --algo bm -j DROP

Se deja pasar todo el trafico en entrada destinado al puerto udp 5080:

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

Se deja pasar todo el trafico en entrada destinado a los puertos udp que van de 10000 a 20000 (Flujo
media o protocolo RTP segn la configuracin predefinida de Asterisk):

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

Ahora que se han definido los puertos base que se necesitan abiertos, se bloquea 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 loopback/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
DROP udp -- anywhere anywhere udp dpt:sip STRING match "friendly-scanner"
ALGO name bm TO 65535
DROP udp -- anywhere anywhere udp dpt:sip STRING match "sipcli" ALGO name
bm TO 65535
DROP udp -- anywhere anywhere udp dpt:sip STRING match "VaxSIPUserAgent"
ALGO name bm TO 65535
DROP udp -- anywhere anywhere udp dpt:sip STRING match "sipvicious" ALGO
name bm TO 65535
DROP udp -- anywhere anywhere udp dpt:sip STRING match "sundayddr" ALGO
name bm TO 65535
DROP udp -- anywhere anywhere udp dpt:sip STRING match "iWar" ALGO name
bm TO 65535
DROP udp -- anywhere anywhere udp dpt:sip STRING match "sipsak" ALGO
name bm TO 65535
ACCEPT udp -- anywhere anywhere udp dpt:sip
DROP udp -- anywhere anywhere udp dpt:onscreen STRING match "friendly-
scanner" ALGO name bm TO 65535
DROP udp -- anywhere anywhere udp dpt:onscreen STRING match "sipcli" ALGO
name bm TO 65535
DROP udp -- anywhere anywhere udp dpt:onscreen STRING match
"VaxSIPUserAgent" ALGO name bm TO 65535
DROP udp -- anywhere anywhere udp dpt:onscreen STRING match "sipvicious"
ALGO name bm TO 65535
DROP udp -- anywhere anywhere udp dpt:onscreen STRING match "sundayddr"
ALGO name bm TO 65535
DROP udp -- anywhere anywhere udp dpt:onscreen STRING match "iWar" ALGO
name bm TO 65535
DROP udp -- anywhere anywhere udp dpt:onscreen STRING match "sipsak"
ALGO name bm TO 65535
ACCEPT udp -- anywhere anywhere udp dpt:onscreen
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

Se guarda la configuracin realizada:

service iptables save


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

Se inicia el servicio:

systemctl start iptables

Se mira el estado:

systemctl status iptables


* iptables.service - IPv4 firewall with iptables
Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled)
Active: active (exited) since mi 2016-05-04 12:36:20 COT; 16s ago
Process: 15960 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)
Main PID: 15960 (code=exited, status=0/SUCCESS)

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 conexin entre dos canales, del flujo
audio/vdeo)

Se renombra el archivo predefinido:

mv /etc/asterisk/rtp.conf /etc/asterisk/rtp.conf.old

Se crea uno nuevo:

nano /etc/asterisk/rtp.conf

Se copian las siguientes lineas:

[general]
rtpstart=10000
rtpend=20000
rtpchecksums=no
dtmftimeout=3000
rtcpinterval=5000
strictrtp=yes
icesupport=yes

Los datos:
[general] etiqueta inicial del archivo de configuracin
rtpstart puerto inicial para el trafico RTP (flujo media)
rtpend puerto final para el trafico RTP (flujo media)
rtpchecksums Activar o no la suma de verificacin en los paquetes RTP
dtmftimeout la cantidad de tiempo (en mili segundos) que un tono DTMF sin marcador de fin
tiene los permisos para continuar en el trafico RTP
mili segundos entre cada reporte del protocolo RTCP (protocolo che se utiliza para monitorear
el flujo RTP)
strictrtp Lo paquetes que no proceden del mismo flujo RTP utilizado en la conexin sern
eliminados
icesupport se activa el soporte para el protocolo ICE (RFC5245).

Se guardan los cambios efectuados y se recarga la configuracin de Asterisk:

systemctl reload asterisk

S-ar putea să vă placă și