domingo, 22 de mayo de 2011

CALIDAD DE SERVICIO (QOS) SOBRE ROUTER’OS

QoS o Calidad de Servicio (Quality of Service, en inglés) son las tecnologías que garantizan la transmisión de cierta cantidad de información en un tiempo dado (throughput). Calidad de servicio es la capacidad de dar un buen servicio. Es especialmente importante para ciertas aplicaciones tales como la transmisión de vídeo o voz. 

En este artículo veremos cómo discriminar el trafico por tipo de servicio (HTTP, FTP, SSH, HTTPs, etc) y por proceso de transferencia de información (DOWNLOAD y UPLOAD), esto es de mucha ayuda a la hora dar prioridad a los servicios críticos.


Puerto
Servicio
Prioridad
Protocolo
80
HTTP
1
tcp
443
HTTPs (HTTP SEGURO)
1
tcp
53
DNS
1
tcp/udp
21
FTP
6
tcp
22
SSH
5
tcp
23
TELNET
6
tcp
25
SMTP
1
tcp
110
POP3
6
tcp
143
IMAP
1
tcp
993
IMAPs (SEGURO)
1
tcp
995
POP3s (SEGURO)
6
tcp
L7Skype
Skype Layer 7
6
tcp
L7Sphone
Skype Phone Layer7
6
tcp
3389
Windows Remote Desktop Protocol (RDP)
1
tcp
0000
Puertos no reconocidos
8
tcp/udp



















Antes que nada, en la organización deben existir políticas de red en donde se deben detallar que servicios (o aplicaciones) están permitidos. Luego hay que definir la prioridad que van a tener cada uno de ellos. A continuación vera una tabla con las columnas (Puerto, Servicio, Prioridad y protocolo), en ella vemos que el trafico http, https, dns, SMTP, IMAP, IMAPs y RDP tienen prioridad 1 (la más alta)

Ahora veremos cómo definir todo esto en un ROUTER OS de mikrotik, por cuestiones de recursos decidí identificar la mayoría de los servicios por puerto ya que ocupan menos recursos en el router y son más fáciles de procesar, solo ocupo LAYER7 con skype recuerden que por puerto el router desarma el paquete solo hasta la capa de transporte. Si ustedes están interesados en el LAYER 7 (capa 7) aquí les dejo una dirección en donde tienen expresiones regulares que ayuda a su router a identificar aplicaciones http://l7-filter.sourceforge.net/protocols

La transferencia de información (si es download o upload) en este caso lo identifico por puerto de origen y destino, si el paquete tiene en SRC-PORT (Puerto de origen) el puerto de la aplicación el paquete es DOWNLOAD, porque el servidor externo te lo está enviando. Análogamente si el paquete tiene en DST-PORT (Puerto de destino) el puerto de la aplicación el paquete es de UPLOAD, porque el cliente está mandando la petición a un servidor externo.

En el mangle de ROUTER OS marcamos los paquetes:

7 ;;; Marco todos los paquetes estos se leen en las colas padre Download y Upload

chain=prerouting action=mark-packet new-packet-mark=all passthrough=no

8 ;;; HTTP DOWNLOAD

chain=prerouting action=mark-packet new-packet-mark=http_download passthrough=no protocol=tcp src-port=80

9 ;;; HTTP UPLOAD

chain=prerouting action=mark-packet new-packet-mark=http_upload passthrough=no protocol=tcp dst-port=80 connection-mark=users-con

10 ;;; HTTPs DOWNLOAD

chain=prerouting action=mark-packet new-packet-mark=https_download passthrough=no protocol=tcp src-port=443

11 ;;; HTTPs UPLOAD

chain=prerouting action=mark-packet new-packet-mark=https_upload passthrough=no protocol=tcp dst-port=443

12 ;;; MSN: Conexi n al Servidor de MSN y Mensajes de Texto /DOWNLOAD/

chain=prerouting action=mark-packet new-packet-mark=msn_texto_download passthrough=no protocol=tcp src-port=1863

13 ;;; MSN: Conexi n al Servidor de MSN y Mensajes de Texto /UPLOAD/

chain=prerouting action=mark-packet new-packet-mark=msn_texto_upload passthrough=no protocol=tcp dst-port=1863

14 ;;; MSN: Transferencia de archivos /DOWNLOAD/

chain=prerouting action=mark-packet new-packet-mark=msn_archivos_download passthrough=no protocol=tcp

src-port=6891-6900

15 ;;; MSN: Transferencia de archivos /UPLOAD/

chain=prerouting action=mark-packet new-packet-mark=msn_archivos_upload passthrough=no protocol=tcp

dst-port=6891-6900

16 ;;; Skype To Phone - Usando L7

chain=prerouting action=mark-packet new-packet-mark=skype_phone passthrough=no layer7-protocol=skypeout

17 ;;; Skype To Skype - Usando L7

chain=prerouting action=mark-packet new-packet-mark=skype_to_skype passthrough=no layer7-protocol=skypetoskype



18 ;;; SMTP DOWNLOAD

chain=prerouting action=mark-packet new-packet-mark=smtp_download passthrough=no protocol=tcp src-port=25

19 ;;; SMTP UPLOAD

chain=prerouting action=mark-packet new-packet-mark=smtp_upload passthrough=no protocol=tcp dst-port=25

20 ;;; FTP DOWNLOAD

chain=prerouting action=mark-packet new-packet-mark=ftp_download passthrough=no protocol=tcp src-port=21,20

21 ;;; FTP - UPLOAD

chain=prerouting action=mark-packet new-packet-mark=ftp_upload passthrough=no protocol=tcp dst-port=21,20

22 ;;; SSH - DOWNLOAD

chain=prerouting action=mark-packet new-packet-mark=ssh_download passthrough=no protocol=tcp src-port=22

23 ;;; SSH - UPLOAD

chain=prerouting action=mark-packet new-packet-mark=ssh_upload passthrough=no protocol=tcp dst-port=22

24 ;;; TELNET - DOWNLOAD

chain=prerouting action=mark-packet new-packet-mark=telnet_download passthrough=no protocol=tcp src-port=23

25 ;;; TELNET - UPLOAD

chain=prerouting action=mark-packet new-packet-mark=telnet_upload passthrough=no protocol=tcp dst-port=23

26 ;;; DNS TCP - DOWNLOAD

chain=prerouting action=mark-packet new-packet-mark=dns_tcp_download passthrough=no protocol=tcp src-port=53
27 ;;; DNS TCP - UPLOAD

chain=prerouting action=mark-packet new-packet-mark=dns_tcp_upload passthrough=no protocol=tcp dst-port=53

28 ;;; DNS UDP DOWNLOAD

chain=prerouting action=mark-packet new-packet-mark=dns_udp_download passthrough=no protocol=udp src-port=53

29 ;;; DNS UDP UPLOAD

chain=prerouting action=mark-packet new-packet-mark=dns_udp_upload passthrough=no protocol=udp dst-port=53

30 ;;; POP3 - DOWNLOAD

chain=prerouting action=mark-packet new-packet-mark=pop3_download passthrough=no protocol=tcp src-port=110

31 ;;; POP3 - UPLOAD

chain=prerouting action=mark-packet new-packet-mark=pop3_upload passthrough=no protocol=tcp dst-port=110

32 ;;; IMAP - DOWNLOAD

chain=prerouting action=mark-packet new-packet-mark=imap_download passthrough=no protocol=tcp src-port=143

33 ;;; IMAP - UPLOAD

chain=prerouting action=mark-packet new-packet-mark=imap_upload passthrough=no protocol=tcp dst-port=143

34 ;;; IMAP SSL - DOWNLOAD

chain=prerouting action=mark-packet new-packet-mark=imap_ssl_download passthrough=no protocol=tcp src-port=993

35 ;;; IMAP SSL - UPLOAD

chain=prerouting action=mark-packet new-packet-mark=imap_ssl_upload passthrough=no protocol=tcp dst-port=993

36 ;;; PUERTOS TCP DISTINTOS DE LOS ACORDADOS DOWNLOAD

chain=prerouting action=mark-packet new-packet-mark=puertos_tcp_download_redundantes passthrough=no protocol=tcp

src-port=!80,443,1863,25,21,22,23,53,110,143,993,3389,20

37 ;;; PUERTOS TCP DISTINTOS DE LOS  ACORDADOS UPLOAD

chain=prerouting action=mark-packet new-packet-mark=puertos_tcp_upload_redundantes passthrough=no protocol=tcp

dst-port=!80,443,1863,25,21,22,23,53,110,143,993,3389,20

38 ;;; Windows Remote Desktop Protocol (RDP) download

chain=prerouting action=mark-packet new-packet-mark=windows_remote_download passthrough=no protocol=tcp

src-port=3389

39 ;;; Windows Remote Desktop Protocol (RDP) UPLOAD

chain=prerouting action=mark-packet new-packet-mark=windows_remote_upload passthrough=no protocol=tcp

dst-port=3389

40 ;;; PUERTOS UDP DISTINTOS DE LOS  ACORDADOS DOWNLOAD

chain=prerouting action=mark-packet new-packet-mark=puertos_udp_download_redundantes passthrough=no protocol=udp

src-port=!80,443,1863,25,21,22,23,53,110,143,993,3389

41 ;;; PUERTOS UDP DISTINTOS DE LOS  ACORDADOS UPLOAD

chain=prerouting action=mark-packet new-packet-mark=puertos_udp_upload_redundantes passthrough=no protocol=udp

dst-port=!80,443,1863,25,21,22,23,53,110,143,993,3389
Ya tenemos los paquetes marcados, ahora tenemos que agregar un tipo de cola pcq. Es el tipo de cola sin clases que sólo se puede hacer limitación. Es una versión mejorada de SFQ sin su naturaleza stohastic. PCQ también crea subcolas, en relación con el parámetro-clasificador PCQ. Cada subcola tiene un límite de velocidad de datos de PCQ-tasa y el tamaño del límite de los paquetes-PCQ. El tamaño total de una cola PCQ no puede ser mayor que PCQ-límite total de los paquetes.

El siguiente ejemplo muestra el uso de PCQ con los paquetes, clasificados por su dirección de origen.

Vamos a tipos de cola y agregamos la cola subida con identificador dst-port y descarga con el identificador src-port

[sadam@OMEGA] /queue type>

 name="subida" kind=pcq pcq-rate=0 pcq-limit=50 pcq-classifier=src-port pcq-total-limit=2000
 name="descarga" kind=pcq pcq-rate=0 pcq-limit=50 pcq-classifier=dst-port pcq-total-limit=2000

total-limit y limit lo dejamos por defecto.

Una vez que tenemos los tipos de colas creados vamos a arbol de cola y agregamos lo siguiente:
Presten atencion que para download tengo definida la interface local y para upload la publica (la de salida a internet)

[sadam@OMEGA] /queue tree>

 0   name="Download" parent=LOCAL packet-mark=all limit-at=0 priority=8 max-limit=1500k burst-limit=0 burst-threshold=0 
     burst-time=0s 
 4   name="http_download" parent=Download packet-mark=http_download limit-at=0 queue=pcq-download priority=1 max-limit=0
     burst-limit=0 burst-threshold=0 burst-time=0s

 5   name="skype_to_skype_download" parent=Download packet-mark=skype_to_skype limit-at=0 queue=descarga priority=7
     max-limit=0 burst-limit=0 burst-threshold=0 burst-time=0s

 6   name="skype_phone_download" parent=Download packet-mark=skype_phone limit-at=0 queue=descarga priority=7 max-limit=0
     burst-limit=0 burst-threshold=0 burst-time=0s

 8   name="https_download" parent=Download packet-mark=https_download limit-at=0 queue=descarga priority=1 max-limit=0
     burst-limit=0 burst-threshold=0 burst-time=0s

12   name="smtp_download" parent=Download packet-mark=smtp_download limit-at=0 queue=descarga priority=1 max-limit=0
     burst-limit=0 burst-threshold=0 burst-time=0s

14   name="ftp_download" parent=Download packet-mark=ftp_download limit-at=0 queue=descarga priority=8 max-limit=0 
     burst-limit=0 burst-threshold=0 burst-time=0s 

16   name="ssh_download" parent=Download packet-mark=ssh_download limit-at=0 queue=descarga priority=6 max-limit=0 
     burst-limit=0 burst-threshold=0 burst-time=0s 

18   name="telnet_download" parent=Download packet-mark=telnet_download limit-at=0 queue=descarga priority=6 max-limit=0 
     burst-limit=0 burst-threshold=0 burst-time=0s

20   name="dns_tcp_download" parent=Download packet-mark=dns_tcp_download limit-at=0 queue=descarga priority=1 max-limit=>
     burst-limit=0 burst-threshold=0 burst-time=0s 


 22   name="dns_udp_download" parent=Download packet-mark=dns_udp_download limit-at=0 queue=descarga priority=1 max-limit=>
     burst-limit=0 burst-threshold=0 burst-time=0s

24   name="pop3_download" parent=Download packet-mark=pop3_download limit-at=0 queue=descarga priority=8 max-limit=0 
     burst-limit=0 burst-threshold=0 burst-time=0s 

26   name="imap_download" parent=Download packet-mark=imap_download limit-at=0 queue=descarga priority=1 max-limit=0 
     burst-limit=0 burst-threshold=0 burst-time=0s 

28   name="imap_ssl_download" parent=Download packet-mark=imap_ssl_download limit-at=0 queue=descarga priority=1 
     max-limit=0 burst-limit=0 burst-threshold=0 burst-time=0s 

30   name="puertos_tcp_download_redundantes" parent=Download packet-mark=puertos_tcp_download_redundantes limit-at=0 
     queue=descarga priority=8 max-limit=500k burst-limit=0 burst-threshold=0 burst-time=0s 

32   name="windows_remote_download" parent=Download packet-mark=windows_remote_download limit-at=0 queue=descarga 
     priority=1 max-limit=0 burst-limit=0 burst-threshold=0 burst-time=0s 

34   name="puertos_udp_download_redundantes" parent=Download packet-mark=puertos_udp_download_redundantes limit-at=0 
     queue=descarga priority=8 max-limit=500k burst-limit=0 burst-threshold=0 burst-time=0s 

 2   name="Upload" parent=SALIDA packet-mark=all limit-at=0 priority=8 max-limit=1M burst-limit=0 burst-threshold=0 
     burst-time=0s 

7   name="http_upload" parent=Upload packet-mark=http_upload limit-at=0 queue=subida priority=1 max-limit=0 
     burst-limit=0 burst-threshold=0 burst-time=0s 
     burst-threshold=0 burst-time=0s 

9   name="https_upload" parent=Upload packet-mark=https_upload limit-at=0 queue=subida priority=1 max-limit=0 
     burst-limit=0 burst-threshold=0 burst-time=0s 
     burst-threshold=0 burst-time=0s 
10   name="skype_to_skype_upload" parent=Upload packet-mark=skype_to_skype limit-at=0 queue=subida priority=7 max-limit=0 
     burst-limit=0 burst-threshold=0 burst-time=0s 

11   name="skype_phone_upload" parent=Upload packet-mark=skype_phone limit-at=0 queue=subida priority=7 max-limit=0 
     burst-limit=0 burst-threshold=0 burst-time=0s 

13   name="smtp_upload" parent=Upload packet-mark=smtp_upload limit-at=0 queue=subida priority=1 max-limit=0 burst-limit=>
     burst-threshold=0 burst-time=0s 

15   name="ftp_upload" parent=Upload packet-mark=ftp_upload limit-at=0 queue=subida priority=6 max-limit=0 burst-limit=0 
     burst-threshold=0 burst-time=0s 

17   name="ssh_upload" parent=Upload packet-mark=ssh_upload limit-at=0 queue=subida priority=6 max-limit=0 burst-limit=0 
     burst-threshold=0 burst-time=0s 

19   name="telnet_upload" parent=Upload packet-mark=telnet_upload limit-at=0 queue=subida priority=6 max-limit=0 
     burst-limit=0 burst-threshold=0 burst-time=0s 

21   name="dns_tcp_upload" parent=Upload packet-mark=dns_tcp_upload limit-at=0 queue=subida priority=1 max-limit=0 
     burst-limit=0 burst-threshold=0 burst-time=0s 

23   name="dns_udp_upload" parent=Upload packet-mark=dns_udp_upload limit-at=0 queue=subida priority=1 max-limit=0 
     burst-limit=0 burst-threshold=0 burst-time=0s 

23   name="dns_udp_upload" parent=Upload packet-mark=dns_udp_upload limit-at=0 queue=subida priority=1 max-limit=0 
     burst-limit=0 burst-threshold=0 burst-time=0s 

25   name="pop3_upload" parent=Upload packet-mark=pop3_upload limit-at=0 queue=subida priority=6 max-limit=0 burst-limit=>
     burst-threshold=0 burst-time=0s 

27   name="imap_upload" parent=Upload packet-mark=imap_upload limit-at=0 queue=subida priority=1 max-limit=0 burst-limit=>
     burst-threshold=0 burst-time=0s 

29   name="imap_ssl_upload" parent=Upload packet-mark=imap_ssl_upload limit-at=0 queue=subida priority=1 max-limit=0 
     burst-limit=0 burst-threshold=0 burst-time=0s 

31   name="puertos_tcp_upload_redundantes" parent=Upload packet-mark=puertos_tcp_upload_redundantes limit-at=0 
     queue=subida priority=8 max-limit=500k burst-limit=0 burst-threshold=0 burst-time=0s 

33   name="windows_remote_upload" parent=Upload packet-mark=windows_remote_upload limit-at=0 queue=default priority=1 
     max-limit=0 burst-limit=0 burst-threshold=0 burst-time=0s 

35   name="puertos_udp_upload_redundantes" parent=Upload packet-mark=puertos_udp_upload_redundantes limit-at=0 
     queue=subida priority=8 max-limit=500k burst-limit=0 burst-threshold=0 burst-time=0s

Podrán ver que cada cola hija tiene una prioridad, pero solo a las tcp/udp que llamo redundantes le pongo limite. Esto es porque no decidimos bloquear los puertos que no están autorizados sino asignarle un ancho de banda pequeño y una prioridad baja. 

Todas las sugerencias y mejoras son bienvenidas.


Les dejo la imagen de la tabla por si necesitan poner este articulo en algún  foro: