18
OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes Ferreira Marcos Paulo Mota Ricardo Baldo Volpato Curso de Redes e Seguranças de Sistemas Pontifícia Universidade Católica do Paraná Curitiba, Novembro de 2010.

OpenVPN com QoS, Uma Solução Alternativa de Baixo Custojamhour/RSS/TCCRSS09A/Marcos Paulo Mota … · OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: OpenVPN com QoS, Uma Solução Alternativa de Baixo Custojamhour/RSS/TCCRSS09A/Marcos Paulo Mota … · OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes

OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo

João Maikon Mendes FerreiraMarcos Paulo Mota

Ricardo Baldo Volpato

Curso de Redes e Seguranças de SistemasPontifícia Universidade Católica do Paraná

Curitiba, Novembro de 2010.

Page 2: OpenVPN com QoS, Uma Solução Alternativa de Baixo Custojamhour/RSS/TCCRSS09A/Marcos Paulo Mota … · OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes

Resumo

Este documento visa a implementação e interligação de uma empresa matriz com sua filial através do uso de software livre com Firewall's de borda com Sistema Operacional FreeBSD 8.0 e o software OpenVPN 2, fazendo um controle de tráfego para obter um melhor desempenho e funcionalidade do Sistema de ERP (Enterprise Resource Plaining) da empresa que funcionará via Windows Terminal Service (WTS) na plataforma Windows 2003 Server, pois o sistema de ERP da empresa foi desenvolvido para essa plataforma, não tendo a disponibilidade de rodar em uma plataforma de Software livre, como mostra figura 01.

Justificativa

A escolha do uso do S.O. FreeBSD para os firewall's de borda para interligação foi devido a uma quebra de paradigma de sempre que pensarmos em Software livre já vir automaticamente na cabeça do usuário o “Linux”, sendo que o FreeBSD também é proveniente da família Unix, e na nossa concepção tem um melhor desempenho como firewall para controle banda, pois, o Quality of Service (QoS) é compilado no próprio Kernel do S.O. onde tem uma melhoria efetiva no desmpenho em conjunto com a aplicação que funcionará como firewall é o Packet Filter (PF), onde a intenção é visar m melhoria na disponibilidade de tráfego para a Virtual Private Network (VPN) e os demais serviços primordiais para o funcionamento da empresa (bankline, e-mails, etc.) de acordo com a prioridade dos mesmos.

A necessidade do uso de WTS é devido ao desenvolvimento do Sistema de ERP ter sido desenvolvido para plataforma Windows, e, a aplicação de WTS é a mais viável em termos de desempenho devido ao link de Internet usado que é ADSL, para uma melhor redução nos custos mensais da empresa.

Figura 01 – Topologia do projeto.

Page 3: OpenVPN com QoS, Uma Solução Alternativa de Baixo Custojamhour/RSS/TCCRSS09A/Marcos Paulo Mota … · OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes

Desenvolvimento

Os equipamentos adquiridos para essa implementação foram os de melhor custo para o desempenho das aplicações necessárias, sendo que os firewall's foram adquiridos pelas configurações de CPU's mais baratas encontradas atualmente no mercado, com o detalhe de se ater aos adaptadores de rede (NIC básicas) para que já fossem compatíveis a tecnologia Giga-Lan, sendo que cada firewall dispõe de 2 NIC's uma para o tráfego interno, e outra para o tráfego externo (onde serão aplicados os controles de banda).

A empresa já disponibilizava a infraestrutura de rede com tecnologia Giga-lan com Switches 3com, patch panel e cabeamento categoria 6 Furukawa.

O equipamento de maior custo foi o servidor que rodará o sistema de WTS e o ERP, no qual foi adquirido o equipamento HP Proliant ML 150 G5.

Implementação

A instalação do sistema operacional foi feito de forma padrão, sem nenhuma configuração adicional, pois as configurações e alterações serão feitas através de scripts desenvolvidos pelos autores.

Para as configurações dos firewall's adotaremos os seguintes procedimentos:1. Compilar o Kernel com a adição do módulo do PF e dos algorítimos de

QoS;2. Atualizar a árvore de diretórios de pacotes do ports;3. Instalar o Software OpenVpn.

Na parte de compilação do kernel usaremos o arquivo GENERIC para arquiteturas 32 bits que vem no FreeBSD e por padrão se encontra dentro do diretório /usr/src/sys/i386/conf/, onde editaremos o arquivo GENERIC conforme Figura 02, e adicionando os módulos (dispositivos e opções) do PF (Packet Filter) conforme a Figura 03, que são:

device pfdevice pflogdevice pfsyncoptions ALTQoptions ALTQ_CBQoptions ALTQ_REDoptions ALTQ_RIOoptions ALTQ_HFSCoptions ALTQ_CDNRoptions ALTQ_PRIQ

Figura 02 – Editando o arquivo GENERIC.

Page 4: OpenVPN com QoS, Uma Solução Alternativa de Baixo Custojamhour/RSS/TCCRSS09A/Marcos Paulo Mota … · OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes

Figura 03 – Inserindo módulos PF.

Em seguida iniciaremos a compilação do kernel através do comando config GENERIC conforme figura 04, para a criação da estrutura de diretório do mesmo. Onde em seguida entraremos no diretório de compilação para instalarmos o kernel modificado através dos comandos make cleandepend, make depend, make, make install, podendo ser efetuado em uma única linha de comando conforme mostra figura 05, para não ter que executá-los um a um, poupando tempo.

Figura 04 – Criação da estrutura do kernel.

Figura 05 – Instalando kernel.

Após a execução desses comando já teremos o kernel instalado conforme figura 06, onde estará ativo a partir que reiniciar o Sistema Operacional novamente.

Figura 06 – Fim da instalação do kernel.

Após reiniciarmos o equipamento iremos atualizar a árvore de pacotes de

Page 5: OpenVPN com QoS, Uma Solução Alternativa de Baixo Custojamhour/RSS/TCCRSS09A/Marcos Paulo Mota … · OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes

aplicações do ports, com o comando portsnap fetch && portsnap extract && portsnap update, conforme figura 07.

Figura 07 – Atualização do Ports.

Feito esse procedimento iremos instalar o Software OpenVPN através do diretório do ports /usr/ports/security/openvpn, instalando de foma padronizada através do comando #make install clean, conforme figura 08. Com as opções padrão, conforme figura 09.

Figura 08 – Instalando OpenVPN.

Figura 09 – Opções de instalação.

Figura 10 – Fim da instalação do OpenVPN.

Page 6: OpenVPN com QoS, Uma Solução Alternativa de Baixo Custojamhour/RSS/TCCRSS09A/Marcos Paulo Mota … · OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes

Após o término da instalação do OpenVPN vamos botar a mão na massa na configuração do mesmo, onde o primeiro passo é a geração das chaves que serão usadas para a certificação e criptografia dos links.

Figura 11 – Diretório dos scripts para geração das chaves.

Figura 12 – Dando permissão de execução nos scripts.

Após estarmos no diretório onde se encontra os scripts de geração das chaves, onde mostra a figura 11, temos que dar permissão de execução aos mesmos para os mesmos, conforme figura 12. Feito isso temos que gerar as chaves com o shell sh do sistema, para isso dentro do diretório atual executaremos o comando #sh, mas antes editaremos o arquivo vars para uma melhor criação das chaves, conforme mostra a 13. A seguir começaremos a criar as chaves de criptografia, através dos seguintes comandos:

• . ./vars;• ./clean-all;• ./build-ca;• ./build-key-server;• ./build-dh;• ./build-key-client.

Figura 13 – Editando o arquivo vars.

O comando #. ./vars carregará as variáveis para criação das chaves, onde a seguir executaremos o comando #./clean-all para limpar o diretório keys onde armazenará as chaves criadas, conforme figura 14.

Figura 14 – Inicio da geração das chaves.

Page 7: OpenVPN com QoS, Uma Solução Alternativa de Baixo Custojamhour/RSS/TCCRSS09A/Marcos Paulo Mota … · OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes

O próximo passo é executarmos o comando #./build-ca para criarmos a chave privada de 1024 bits, conforme figura 15.

Figura 15 – Criando a chave privada.

A seguir vamos criar a chave do servidor através do comando #./build-key-server nome_da_chave, onde temos que dar nome nessa chave que deve ser o mesmo a ser preenchido na parte Common Name na geração da mesma, conforme mostra figura 16.

O próximo passo é executarmos o comando #./build-dh para criptografarmos as chaves geradas, como mostra a figura 17.

E por fim vamos gerar as chaves dos cliente que farão a conexão com o nosso servidor da VPN através do comando #./build-key-client nome_da_chave, onde devemos no ater ao mesmo detalhe de o nome_da_chave deve ser o mesmo a ser preenchido no Common Name, no momento da geração da chave, conforme figura 18.

Page 8: OpenVPN com QoS, Uma Solução Alternativa de Baixo Custojamhour/RSS/TCCRSS09A/Marcos Paulo Mota … · OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes

Figura 16 – Criando a chave do server.

Figura 17 - Criptografando as chaves.

Page 9: OpenVPN com QoS, Uma Solução Alternativa de Baixo Custojamhour/RSS/TCCRSS09A/Marcos Paulo Mota … · OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes

Figura 18 – Gerando a chave do cliente.

E por fim sairemos do Shell sh, como mostra a figura 19.

Figura 19 – Saindo do shell sh.

Agora iremos configurar o OpenVPN através do arquivo de configuração encontrado no diretório /usr/local/share/openvpn/sample-config-files/, conforme figura 20, onde devemos pegar o arquivo server.conf e copiar para o diretório que devemos criar /usr/local/etc/openvpn no qual devemos renomear o arquivo server.conf para openvpn.conf, como mostra a figura 21.

Page 10: OpenVPN com QoS, Uma Solução Alternativa de Baixo Custojamhour/RSS/TCCRSS09A/Marcos Paulo Mota … · OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes

Figura 20 – Diretório de arquivos de exemplos de configuração.

Figura 21 – Copiando o arquivo para configurar o modo server do openvpn.

Segue abaixo um arquivo editado do openvpn.conf para servidor, para um melhor entendimento do leitor:--------------------------------------Inicio do arquivo-------------------------------------##Porta que rodará o serviçoport 1194##Protocolo de comunicaçãoproto udp##Dispositivo criado para comunicaçãodev tun1##Chaves de autenticaçãoca /usr/local/etc/openvpn/keys/ca.crtcert /usr/local/etc/openvpn/keys/server.crtkey /usr/local/etc/openvpn/keys/server.key # This file should be kept secretdh /usr/local/etc/openvpn/keys/dh1024.pem##Rede que será criada entre os pontos de VPNserver 172.16.10.0 255.255.255.0##Arquivo que armazenará os ips destinados aos clientesifconfig-pool-persist /usr/local/etc/openvpn/ipp.txt##Rede interna do servidorpush "route 192.168.0.0 255.255.255.0"##Arquivo que armazenará as redes internas dos clientesclient-config-dir /usr/local/etc/openvpn/ccdroute 192.168.1.0 255.255.255.0##Tipo de conexãoclient-to-client##Tempo de checagem para manter a conexão ativa (10 pings a cada 120 segundos)keepalive 10 120##Tipo de criptografiacipher AES-128-CBC # AES##Biblioteca de compressãocomp-lzo##Persistência na troca de chavespersist-key##persistência para criação do tunnelpersist-tun##Arquivo de logstatus /var/log/openvpn.log##Quantidade de informacoes no arquivo de logverb 3-------------------------------------------Fim do arquivo--------------------------------------

Page 11: OpenVPN com QoS, Uma Solução Alternativa de Baixo Custojamhour/RSS/TCCRSS09A/Marcos Paulo Mota … · OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes

O próximo arquivo é o openvpn.conf na ponta do cliente, para fazer a conexão.------------------------------------------Inicio do Arquivo-------------------------------------clientdev tun1proto udpremote 187.4.X.Y 1194resolv-retry infinitenobindpersist-keypersist-tunca /usr/local/etc/openvpn/keys/ca.crtcert /usr/local/etc/openvpn/keys/cliente1.crtkey /usr/local/etc/openvpn/keys/cliente1.keyns-cert-type servercipher AES-128-CBCcomp-lzoverb 3------------------------------------------Fim do Arquivo--------------------------------------

O firewall usado para fazer o controle de banda como mencionado anteriormente é o P.F. (packet filter), onde abaixo mostraremos o script feito para o mesmo que por padrão se encontra no diretório /etc:------------------------------------------Inicio do arquivo-------------------------------------######MACROSext_if="re0"int_if="re1"lan_net="192.168.0.0/24"loopback="lo0"bcast="192.168.0.255"noip_pt="8245"vpn_if="tun1"int_ip="192.168.0.254"vpn_gw="187.4.X.Y"vpn_pt="1194"vpn_net="{192.168.1.0/24, 172.16.10.0/24}"wts="192.168.0.250"wts_pt="3389"ti="{192.168.0.200, 192.168.0.201, 192.168.0.202, 192.168.0.203, 192.168.0.204, 192.168.0.205, 192.168.0.206, 192.168.0.207, 192.168.0.208, 192.168.0.209}"vnc_suporte="192.168.0.202"vnc_pt="5500"samba_pt="{137, 138, 139, 445}"xmpp_pt="{5222, 5223}"ftpproxy_pt="44300:44500"lanmsg_pt="14221"dvr="192.168.0.249"dvr_pt="37777"

######TABELAStable <SITES_443> file "/etc/pf/sites443"table <BANCOS> file "/etc/pf/bancos"table <MSN> file "/etc/pf/msn"table <MSN_CONEXAO> file "/etc/pf/microsoft_hotmail"table <LOGMEIN> file "/etc/pf/logmein"table <KASPERSKY> file "/etc/pf/kaspersky"table <NOIP> file "/etc/pf/noip"table <XMPP> file "/etc/pf/xmpp"table <PASC> file "/etc/pf/pasc"table <SSH>

##-------------------------------------HFSC----------------------------------####CONTROLE DE TRAFEGO PARA A INTERFACE VPNaltq on $vpn_if hfsc bandwidth 256Kb qlimit 150 queue {samba_up, wts_up} queue samba_up on $vpn_if bandwidth 60% priority 6 qlimit 150 hfsc (linkshare 5% upperlimit 100% realtime 20% red default) queue wts_up on $vpn_if bandwidth 40% priority 7 qlimit 150 hfsc (linkshare 5% upperlimit 100% realtime 15% red)

####CONTROLE DE TRAFEGO PARA A INTERFACE EXTERNA

Page 12: OpenVPN com QoS, Uma Solução Alternativa de Baixo Custojamhour/RSS/TCCRSS09A/Marcos Paulo Mota … · OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes

altq on $ext_if hfsc bandwidth 256Kb qlimit 150 queue {banco_up, email_up, www_up} queue www_up on $ext_if bandwidth 10% priority 1 qlimit 150 hfsc (linkshare 2% upperlimit 100% realtime 10% red default) queue email_up on $ext_if bandwidth 15% priority 2 qlimit 150 hfsc (linkshare 2% upperlimit 100% realtime 15% red) queue banco_up on $ext_if bandwidth 25% priority 5 qlimit 150 hfsc (linkshare 5% upperlimit 100% realtime 20% red)

####CONTROLE DE TRAFEGO PARA INTERFACE LANaltq on $int_if hfsc bandwidth 1000Mb qlimit 150 queue {int_if, int_down} queue int_if on $int_if bandwidth 999Mb priority 1 qlimit 150 hfsc (linkshare 2% upperlimit 100% realtime 1% red default) queue int_down on $int_if hfsc bandwidth 1Mb qlimit 150 {vpn_down, banco_down, email_down} queue email_down on $int_if bandwidth 20% priority 2 qlimit 150 hfsc (linkshare 2% upperlimit 100% realtime 15% red) queue banco_down on $int_if bandwidth 30% priority 5 qlimit 150 hfsc (linkshare 5% upperlimit 100% realtime 20% red) queue vpn_down on $int_if hfsc bandwidth 50% qlimit 150 {samba_down, wts_down} queue samba_down on $int_if bandwidth 60% priority 6 qlimit 150 hfsc (linkshare 5% upperlimit 100% realtime 20% red) queue wts_down on $int_if bandwidth 40% priority 7 qlimit 150 hfsc (linkshare 5% upperlimit 100% realtime 15% red)##---------------------------------------------------------------------------

######NATnat-anchor "pftpx/*"nat on $ext_if from $lan_net to !$lan_net -> ($ext_if)

######REDIRECIONAMENTOrdr-anchor "pftpx/*"rdr pass on $int_if proto tcp from any to any port 21 -> 127.0.0.1 port 8021rdr pass on $int_if inet proto {tcp,udp} from $lan_net to !$lan_net port 80 -> ($int_if) port 3128rdr on $ext_if inet proto {tcp,udp} from any to port $wts_pt -> $wtsrdr on $ext_if inet proto {tcp,udp} from any to port $dvr_pt -> $dvr

######REGRAS DE FILTRAGEM##BLOQUEIA TUDOblock log all##PFTPXanchor "pftpx/*"pass in quick on $ext_if inet proto tcp from any to any port $ftpproxy_pt keep statepass in quick on $int_if inet proto {tcp,udp} from $lan_net to any port {20,21} keep state##OPENVPN SERVERpass in quick on $vpn_if inet proto {tcp,udp} from $vpn_net to $wts port $wts_pt queue wts_up keep statepass out quick on $int_if inet proto {tcp,udp} from $vpn_net to $wts port $wts_pt queue wts_down keep statepass in quick on $vpn_if inet proto {tcp,udp} from $vpn_net to $lan_net port $samba_pt queue samba_up keep statepass in quick on $int_if inet proto {tcp,udp} from $wts to $vpn_net port $samba_pt queue samba_down keep statepass out quick on $vpn_if inet proto {tcp,udp} from $lan_net to $vpn_net port $samba_pt queue samba_up keep statepass in quick on $ext_if inet proto {tcp,udp} from any to $vpn_gw port $vpn_pt queue wts_up keep statepass in quick on $vpn_if inet proto {tcp,udp} from $vpn_net to $wts port $lanmsg_pt queue samba_up keep state##OPENVPN CLIENT#pass in quick on $int_if inet proto {tcp,udp} from $lan_net to $wts port $wts_pt queue wts_down keep state#pass out quick on $vpn_if inet proto {tcp,udp} from $lan_net to $wts port $wts_pt queue wts_up keep state#pass in quick on $int_if inet proto {tcp,udp} from $lan_net to $vpn_net port $samba_pt queue samba_down keep state#pass out quick on $vpn_if inet proto {tcp,udp} from $lan_net to $vpn_net port $samba_pt queue samba_up keep state#pass in quick on $vpn_if inet proto {tcp,udp} from $vpn_net to $lan_net port $samba_pt queue samba_up keep state#pass out quick on $int_if inet proto {tcp,udp} from $vpn_net to $lan_net port $samba_pt queue samba_down keep state##OUTLOOK MESSENGERpass out quick on $int_if inet proto {tcp,udp} from any to $wts port $lanmsg_pt queue samba_down keep state##WTSpass in quick log on $ext_if inet proto {tcp,udp} from any to $wts port $wts_pt queue wts_up keep statepass out quick log on $int_if inet proto {tcp,udp} from any to $wts port $wts_pt queue wts_down keep state##BANCOSpass in quick on $int_if inet proto {tcp,udp} from $lan_net to <BANCOS> port {443, 5000} queue banco_down keep statepass out quick on $ext_if inet proto {tcp,udp} from ($ext_if) to <BANCOS> port {443, 5000} queue banco_up keep state##EMAILpass in quick on $int_if inet proto tcp from $lan_net to any port {25, 465, 110, 143, 995, 993} queue email_down keep statepass out quick on $ext_if inet proto {tcp,udp} from ($ext_if) to any port {25, 465, 110, 143, 995, 993} queue email_up keep state##SSH EXTERNO AUTENTICADOpass in quick on $ext_if inet proto tcp from <SSH> to ($ext_if) port 22 keep statepass out quick on $ext_if inet proto tcp from any to any port 22 keep state##SSH REDE INTERNApass in quick on $int_if inet proto tcp from $lan_net to any port 22 keep statepass out quick on $int_if inet proto tcp from $lan_net to any port 22 keep state##SSH VPNpass in quick on $vpn_if inet proto tcp from any to $int_ip port 22 keep statepass out quick on $vpn_if inet proto tcp from any to any port 22 keep state##DNSpass in quick on {$int_if, $ext_if} inet proto {tcp,udp} from any to any port 53 keep statepass out quick on {$int_if, $ext_if} inet proto {tcp,udp} from any to any port 53 keep state##DHCP

Page 13: OpenVPN com QoS, Uma Solução Alternativa de Baixo Custojamhour/RSS/TCCRSS09A/Marcos Paulo Mota … · OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes

pass in quick on $int_if inet proto udp from any port 68 to any port 67 keep statepass out quick on $int_if inet proto udp from any port 67 to any port 68 keep state##PINGpass in quick on $int_if inet proto {icmp} from any to any keep statepass in quick on $ext_if inet proto {icmp} from any to any keep state##LOOPBACKpass in quick on $loopback all keep statepass out quick on $loopback all keep state##NOIPpass in quick on $int_if inet proto tcp from $lan_net to <NOIP> port $noip_pt keep state##LOGMEINpass in quick on $int_if inet proto tcp from $lan_net to <LOGMEIN> port 443 keep state##SQUIDpass in quick on $int_if inet proto {tcp,udp} from $lan_net to any port 80 keep state##DVRpass in quick on $ext_if inet proto {tcp,udp} from any to $dvr port $dvr_pt keep statepass out quick on $int_if inet proto {tcp,udp} from ($int_if) to $dvr port $dvr_pt keep state##VNCpass in quick on $int_if inet proto {tcp,udp} from $lan_net to any port $vnc_pt keep state##VNC SUPORTEpass in quick on $ext_if inet proto {tcp,udp} from any to $vnc_suporte port $vnc_pt keep state##SAMBApass in quick on $int_if inet proto {tcp,udp} from $lan_net to ($int_if) port $samba_pt keep statepass out quick on $int_if inet proto {tcp,udp} from ($int_if) to $lan_net port $samba_pt keep statepass in quick on $int_if inet proto {tcp,udp} from $lan_net to $bcast port $samba_pt keep state##XMPPpass in quick on $int_if inet proto {tcp,udp} from $lan_net to <XMPP> port $xmpp_pt keep state##COBANpass in quick on $int_if inet proto {tcp,udp} from $lan_net to any port 11965 keep state##NAT-PMPpass in quick on $int_if inet proto {tcp,udp} from $lan_net to ($int_if) port 5351 keep state##PASCpass in quick on $int_if inet proto {tcp,udp} from $lan_net to <PASC> port 5024 keep state##NTPpass in quick on $int_if inet proto {tcp,udp} from any to any port 123 keep state##SITES 443pass in quick on $int_if inet proto {tcp,udp} from $lan_net to <SITES_443> port 443 keep state##TIpass in quick on $int_if inet proto {tcp,udp} from $ti to any port {0:79, 81:65535} keep state##SAIDA PADRAOpass out quick log on $ext_if all keep state

------------------------------------------Fim do arquivo-------------------------------------Abaixo mostraremos o conteúdo do arquivo /etc/pf/bancos que configura a tabela

<BANCOS> usada no PF para um melhor entendimento para configuração, e da tabela <SSH> para um acesso autenticado, porém alguns dados estão censurados por motivo de segurança das informações:

Execução do comando cat arquivo /etc/pf/bancos:200.201.160.0/20 ##cef170.66.0.0/16 ##bb200.220.176.0/20 ##santander200.155.80.0/20 ##bradesco200.208.15.0/24 ##ABN AMRO REAL200.208.16.0/24 ##ABN AMRO REAL200.149.20.0/24 ##ABN AMRO REAL201.55.240.0/20 ##barinsul200.152.224.0/20 ##hsbc161.113.0.0/16 ##hsbc200.196.144.0/20 ##itau200.155.107.0/24 ##unibanco200.155.108.0/24 ##unibanco200.230.42.0/24 ##unibanco200.219.136.0/23 ##besc200.183.247.128/26 ##ticket200.245.207.0/24 ##serasa200.218.208.0/20 ##bcbExecução do comando cat no arquivo /etc/pf/ssh.sh, onde deixaremos uma

execução na cron de 2 em 2 minutos para atualização dos IP's, lembrando que temos que

Page 14: OpenVPN com QoS, Uma Solução Alternativa de Baixo Custojamhour/RSS/TCCRSS09A/Marcos Paulo Mota … · OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes

deixar permissão de execução (755) no arquivo /etc/pf/ssh.sh:#!/bin/shIP=$(host xxxxxxxpc.no-ip.info | awk '{print $4}')IP1=$(host xxxxxxxcasa.no-ip.info | awk '{print $4}')IP2=$(host xxxxxxxxcresol.no-ip.info | awk '{print $4}')/sbin/pfctl -t SSH -Tflush/sbin/pfctl -t SSH -Tadd $IP $IP1 $IP2Devemos salientar que a parte em vermelho do arquivo de configuração do

firewall é a que estamos tratando especificamente nesse trabalho. Onde no primeiro bloco se trata da criação das filas de prioridade e na segunda parte trata-se da criação das regras propriamente dita, sendo que este aquivo pode ser usado para a implementação de um firewall proxy completo, dependendo da necessidade do leitor deste trabalho, e, ressalvo que este firewall está em produção na atual empresa que se encontra Marcos Paulo Mota, um dos autores deste trabalho. A estrutura lógica do script é baseado em macros, onde basta o leitor adaptar os valores das variáveis para suprir sua necessidade.

O tipo de algorítimo que usamos para a criação das filas foi o HFSC (Hierarchical Fair Service Curve), onde o mesmo é baseado na criação de uma fila pai e filas filho (classe e subclasse), onde na criação das sub-filas podem ser definidos mais 3 parâmetros mostrados na tabela 1.

Tabela 1 - Tabela de prioridades do algoritmo HFSC.

PARÂMETRO FUNCIONALIDADE

linkshare

Quantidade de link compartilhado da sub-fila para outra que necessite de mais tráfego, não podendo ultrapassar mais de 80% do valor de bandwidth na soma de todas as filas, ou seja, se a bandwidth for de 25% o linkshare não pode passar de 20%

upperlimit Corresponde ao limite máximo de velocidade para a filarealtime Corresponde a velocidade de banda garantida para a fila

Fonte: Elaboração Autores, 2010.

A tabela 2 define o padrão das filas com suas respectivas prioridades de tráfego, percentual de linkshare, upperlimit e realtime na interface da VPN, e a tabela 3 define o padrão das filas para navegação na interface EXTERNA.

Tabela 2 - Prioridades e velocidade das filas na interface VPN, com algoritmo HFSC.

APLICAÇÃOPRIORI-DADE

VELOCIDADECOMPAR-TILHADO

LIMITE MÁXIMO

GARAN-TIDO

Transf. de Arquivo Prioridade 6 60% da banda 5% 100% 20%WTS Prioridade 7 40% da banda 5% 100% 15%

Fonte: Elaboração Autores, 2010.

Tabela 3 - Prioridades e velocidade das filas na interface EXTERNA, com algoritmo HFSC.

APLICAÇÃOPRIORI-DADE

VELOCIDADECOMPAR-TILHADO

LIMITE MÁXIMO

GARAN-TIDO

Padrão Prioridade 1 10% da banda 2% 100% 10%E-mail Prioridade 2 15% da banda 2% 100% 15%Internet Banking Prioridade 5 25% da banda 5% 100% 20%

Fonte: Elaboração Autores, 2010.

De acordo com a tabela 2 a criação das filas foram criadas para garantir 50% da banda disponível dividida para navegação, acesso a internet banking e e-mail, e os outro 50%

Page 15: OpenVPN com QoS, Uma Solução Alternativa de Baixo Custojamhour/RSS/TCCRSS09A/Marcos Paulo Mota … · OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes

da banda dividida para a funcionalidade do WTS e transferência de arquivos em outra interface, como mostra tabela 3. Quanto a definições das prioridades, a regra funciona de acordo decrescente de 1 à 7, onde a 7 tem maior prioridade de atendimento e a 1 a menor prioridade de atendimento.

Conforme mostra a figura 22, temos as filas criadas sem tráfego nas mesmas. A seguir mostraremos os testes de tráfegos e seus monitoramentos das filas de acordo com as passagens dos pacotes, sendo que o primeiro teste será a conexão WTS (fila wts_up e wts_down) junto com o tráfego normal passando pela rede também (filas default), como mostra figura 23. Na sequência iniciaremos uma transferência de arquivo para monitorar o tráfego na fila de transferência de arquivo (fila samba_up e samba_down), onde a fila samba_down não popula tráfego, como mostra figura 24, devido ao tráfego estar indo direto ao compartilhamento samba que possui o firewall, como mostra figura 25, caso a transferência fosse para algum host da rede interna o tráfego popularia a fila samba_down.

A figura 26 mostra todas as filas sendo populadas na rede, num dia de produção normal, onde temos uma grande solicitação de tráfegos, tanto de entrada como de saída, o que é normal em uma empresa nos dias de hoje. O que agora garante uma estabilidade nos serviços, devido ao controle de tráfego nos mesmos.

Figura 22 – Filas de tráfegos zeradas.

Page 16: OpenVPN com QoS, Uma Solução Alternativa de Baixo Custojamhour/RSS/TCCRSS09A/Marcos Paulo Mota … · OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes

Figura 23 – Iniciando uma conexão WTS.

Figura 24 – Iniciando transferência de arquivo.

Figura 25- Transferindo arquivo para o firewall.

Page 17: OpenVPN com QoS, Uma Solução Alternativa de Baixo Custojamhour/RSS/TCCRSS09A/Marcos Paulo Mota … · OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes

Figura 26 – Rede em um dia de produção.

Page 18: OpenVPN com QoS, Uma Solução Alternativa de Baixo Custojamhour/RSS/TCCRSS09A/Marcos Paulo Mota … · OpenVPN com QoS, Uma Solução Alternativa de Baixo Custo João Maikon Mendes

Conclusões

Outros algorítimos de QoS foram levantados em testes, mas o melhor definido para essa implementação foi o HFSC, pois o fato de ser mais complexo garante uma melhor divisão dos links para garantir um tráfego estável e priorizado com base nas necessidades individuais de cada organização, diminuindo o nível de insatisfação por parte dos colaboradores em virtude do meio concorrido de comunicação baseado no modelo FIFO.

A finalidade dessa implementação é de poder oferecer um serviço de qualidade com baixo custo, afinal é a linguagem que todo administrador que se preza gosta de ouvir . A funcionalidade das regras garantem uma estabilidade, quando atreladas ao algorítimo HFSC (Hierarchical Fair Service Curve) garantem uma boa navegação e funcionalidade das aplicações ERP (Enterprise Resource Plaining), que no caso em questão tratam-se das transferências de arquivos (aplicação Samba) e conectividade via WTS (Windows Terminal Service), onde mesmo com tráfegos concorrentes, atuando simultaneamente no link de comunicação, fazendo com que as aplicações priorizadas tivessem um funcionamento estável e confiável.

Qualquer pessoa com um pouco de conhecimento em sistemas Unix Like, terão em mãos uma boa documentação para implementação desse serviço em sua organização. Onde também gostaríamos de deixar como indicação de um estudo futuro a seguinte orientação:

• Provisionamento de QoS baseado em soluções livres para tráfego multimídia e voz, acompanhando a tendência de redes com tráfegos cada vez mais heterogêneos.