Proxy/Cache (squid) DHCP Firewall Controle de Banda (CBQ) Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 1 INTRODUÇÃO É com grande prazer que apresentamos a vocês esse minicurso elaborado para você profissional/estudante de TI. Neste minicurso será apresentado à implementação de Servidores Linux. A seguir vamos apresentar os módulos que serão abordados: Módulo 01: Implementando Servidores de PROXY/CACHE (Squid) Neste módulo, você verá muitas coisas que são importantes na hora de implementar um Servidor de Proxy em uma rede corporativa. Benefícios, equipamento, instalação e configuração, funcionamento, tipos de bloqueios e liberações, tamanhos de cache e funcionalidades. Módulo 2: Implementando Configuration Protocol) Servidores de DHCP (Dynamic Host Neste módulo vamos falar sobre o DHCP, uma ferramenta excelente que tem como função distribuir os “ranges” de IP’S de uma determinada rede. Benefícios, instalação, reserva de IPS. Módulo 3: Implementando Servidores de Firewall (Iptables) Chegamos a parte onde será apresentado um dos assuntos mais discutidos na área de TI hoje em dia, Segurança. Nunca houve tanta preocupação com os dados corporativos como há hoje. Ao final deste módulo vamos ver como instalar e configurar um firewall utilizando o IPTABLES do Linux. Módulo 4: Implementando controle de Banda (CBQ) E por fim, no entanto não menos importante, veremos a instalação e configuração do CBQ um eficiente controle de banda que em conjuntos que tudo que foi visto anteriormente proporcionara uma economia de banda de 30% a 50% da banda de internet. Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 2 1 IMPLEMENTANDO SERVIDOR PROXY/CACHE COM SQUID Com a internet cada vez mais acessível a pequenas e médias empresas, um número imenso de pessoas está se interligando a internet. Além de todos os benefícios trazidos por ela, como informação em tempo real, comunicação mundial a baixo custo, contato com possíveis clientes e fornecedores por todo o mundo, a mesma trouxe alguns problemas. As pessoas tendem a passar cada vez mais tempo navegando por sites não relativos ao seu trabalho primário, acessam sites que não condizem com a política da empresa, utilizam a banda de internet destinada a serviços como WEB, VPN ou ACESSO REMOTO e podem, em muitos casos, acabar infectando toda a rede da empresa com vírus e worms que são adquiridos em sites impróprios e podem comprometer toda a estrutura da empresa. Isso sem contar na ameaça sempre presente de propagação de downloads de softwares piratas e músicas, fatores que podem complicar a vida de uma empresa durante fiscalizações. 1.2 O que é PROXY Proxy é o termo utilizado para definir os intermediários entre o usuário e seu servidor. Mas como assim servidor? Em linhas gerais, todos os dados que você deseja acessar na internet são disponibilizados por um servidor. Logo, o servidor proxy atende seus pedidos e repassa os dados do usuário à frente. O caminho seria: um cliente conecta-se a um servidor proxy e requisita algum serviço, cabe ao proxy enviar a solicitação do endereço local para o servidor no entanto antes de repassar a solicitação o mesmo checa seu arquivo de configuração para saber se não existe algum bloqueio, traduzindo e repassando o seu pedido. Essa solicitação pode ser algo como um arquivo, um site na web, ou qualquer outro recurso disponível em outro servidor. 1.3 O que é CACHE Normalmente, os visualizadores de páginas Web (browsers) fazem conexão direta com os servidores remotos. Entretanto, eles podem ser configurados para se conectar a um servidor proxy. Assim, quando um usuário requisita uma página, o browser primeiramente checa seu cache local. Se a página (URL) não é encontrada, ele a requisita para o servidor proxy local. Se este tem a cópia (cache hit) e ela não expirou, ele a retorna imediatamente. Caso esta não esteja no cache (cache miss), ele entrará em contato com o servidor remoto e fará a transferência, mantendo uma cópia (opcional) em seu cache e enviando uma cópia para a máquina do usuário. 1.4 Porque utilizar PROXY/CACHE? Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 3 De acordo com a Rede Nacional de Ensino e Pesquisa (RNP), 65% da largura de banda das empresas são utilizadas em navegação WEB. E esse número tende a crescer. Ainda de acordo com a Rede Nacional de Ensino e Pesquisa (RNP) - 2, a utilização de PROXY/CACHE pode gerar uma economia entre 30 e 50% de banda, além de reduzir o numero de incidentes por vírus, manter um acesso restrito a sites específicos ao setor o que proporciona um ganho as atividades exercidas pelos seus funcionários. 1.5 Instalando e configurando PROXY/CACHE (SQUID) Agora que já sabemos como os serviços de PROXY e CACHE trabalham vamos partir para implementação e configuração. Existem diversos tipos de PROXY/CACHE vamos utilizar o SQUID. A instalação do se da através do comando: Toda e qualquer configuração do SQUID é feita através do seu arquivo de configuração o “squid.conf” que se encontra em “/etc/squid/squid.conf”. O arquivo por padrão vem repleto de regras comentadas visando explicar o funcionamento do mesmo, vamos remover este arquivo e criar nosso arquivo limpo e com os parâmetros necessários. Vamos gerar uma copia do arquivo de configuração do SQUID e criar um novo para isso deverão executar o comando: Após gerar copia vamos excluir o arquivo original com o comando: Após exclusão do arquivo vamos recria-lo utilizando nossas regras e parâmetros. Para isso executamos o comando: Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 4 Exemplo de Squid.conf: # squid.conf # Porta que o squid escutara http_port 3128 transparent ##### Configuracoes de Cache ############################# cache_mem 256 MB # Memoria ram dedicada ao cache maximum_object_size_in_memory 100 KB cache_swap_low 90 cache_swap_high 95 cache_dir ufs /var/spool/squid 45000 20 256 ##### Configuracao de logs ########################### access_log /var/log/squid/access.log squid cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log pid_filename /var/log/squid/squid.pid # pid - mudamos para esta pasta para facilitar na identificação de problemas mime_table /usr/share/squid/mime.conf diskd_program /usr/lib/squid/diskd unlinkd_program /usr/lib/squid/unlinkd error_directory /usr/share/squid/errors/Portuguese visible_hostname Firewalll #### Acl de controle ###################### acl all src 0.0.0.0/0.0.0.0 #todo e qualquer range de IP acl manager proto cache_object acl localhost src 127.0.0.1/32 acl to_localhost dst 127.0.0.0/8 ##### Controle de portas ######################### acl Safe_ports port 80 22 8080 # http acl SSL_ports port 443 563 # https, snews acl SSL_ports port 873 # rsync acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl Safe_ports port 631 # cups acl Safe_ports port 873 # rsync acl Safe_ports port 901 # SWAT acl Safe_ports port 21 # ftp acl Safe_ports port 3389 #wts acl CONNECT method CONNECT acl purge method PURGE Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 5 #ACL Personalizadas ##################### acl lan src 192.168.0.0/24 # Rede acl gerentes src "/etc/squid/gerentes" acl financeiro src "/etc/squid/financeiro" acl sites_financeiro url_regex -i "/etc/squid/sites_financeiro" acl sites_proibidos url_regex -i "/etc/squid/sites_proibidos" acl ext_permitidas urlpath_regex -i "/etc/squid/ext_permitidas" acl ext_block urlpath_regex -i "/etc/squid/ext_block" acl sem_net urlpath_regex "/etc/squid/sem_net" http_access http_access http_access http_access http_access http_access http_access http_access allow gerentes allow gerentes ext_block deny sem_net deny sites_proibidos allow financeiro sites_financeiro deny lan ext_block allow lan allow manager localhost http_access deny all Após criar e editar o novo arquivo deverão dar a ele permissões de execução através do comando: OBS – Sempre que o arquivo de configuração for editado o mesmo deve ser recarregado para que as configurações sejam aplicadas. Os seguintes comandos podem ser executados para efetuar tais operações: Existe também o comando: A partir deste momento estamos com o arquivo de configuração do SQUID pronto, no entanto isso ainda não é suficiente para que o mesmo já comece a executar seu trabalho, para tal precisamos fazer configurar as placas de rede e direcionar o trafego da porta 80 (Porta de comunicação com a internet) para a 3128 (Porta de escuta do SQUID). Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 6 Cenário: Internet Eth0 10.0.1.2 Eth1 192.168.0.1 Modem (ADSL) IP 10.0.1.1 MiniCurso 01 IP 192.168.0.2 MiniCurso 02 IP 192.168.0.3 MiniCurso 03 IP 192.168.0.4 MiniCurso 04 IP 192.168.0.5 MiniCurso 05 IP 192.168.0.6 MiniCurso 06 IP 192.168.0.7 Hub/Switch Vamos dar sequencia aos processos de configuração. Iremos agora editar as configurações das placas de rede (devem haver duas). Para isso execute o comando: Este é o arquivo que contem as configurações de rede “IP”, “MASCARA”, “GATEWAY” etc. # /etc/network/interfaces # Interface de rede local - loopback auto lo iface lo inet loopback # Primeira placa de rede - Internet auto eth0 iface eth0 inet static address 10.0.0.2 netmask 255.255.255.0 broadcast 10.0.0.255 network 10.0.0.0 gateway 192.168.0.1 # IP do moden # Segunda placa de rede - Intranet Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 7 auto eth1 iface eth1 inet static address 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255 network 192.168.0.0 Com a execução do passo a cima estamos com nossas configurações quase prontas! Vamos agora compartilhar a conexão com a internet e direcionar o trafego da porta 80 (HTTP) para 3128 (SQUID). Para isso devemos criar o arquivo onde ficaram essas configurações “rc.firewall” através do comando: Nele devemos inserir as seguintes regras: #!/bin/bash # /etc/etc/init.d/rc.firewall # Limpa e inicializa os modulos iptables -F iptables -t nat -F iptables -t mangle -F modprobe iptable_nat # Proxy transparente (Redireciona para o squid) - eth1 -> Placa de rede da intranet iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128 # Compartilha Internet - eth0 -> Placa de rede da internet iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward Com as configurações prontas basta apenas darmos permissão para execução: Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 8 Agora basta iniciarmos as regras com o comando: Pronto nosso SQUID já estara atuando de acordo com as regras criadas. 2 IMPLEMENTANDO SERVIDOR DE DHCP Neste módulo vamos aprender como instalar e configurar o DHCP assim como suas funcionalidades e benefícios. Dica: Antes de começar qualquer execução, faça um planejamento, desenhe, esboce, monte um cronograma, fala levantamentos de custos.... Isso é essencial para qualquer projeto, não somente para a área de TI. 2.1 O que é DHCP? O que significa esta sigla e para que serve tê -lo em seu computador. Quando falamos em redes, existem alguns recursos que são utilizados e facilitam muito a nossa vida, mas nem os percebemos. Um deles é o protocolo DHCP. Do inglês Dynamic Host Configuration Protocol (que ficaria, em português, algo como Protocolo de Configuração Dinâmica de Endereços de Rede), é um protocolo utilizado em redes de computadores que permite às máquinas obterem um endereço IP automaticamente. Este protocolo começou a ganhar terreno aproximadamente em Outubro de 1993, sendo o sucessor do BOOTP que, embora seja mais simples, tornou-se muito limitado para as exigências atuais. 2.2 Por que ele é importante? Digamos que você seja o administrador de uma rede. Se fosse uma rede doméstica com 3 computadores, não seria trabalhoso atribuir um número de IP e todos os parâmetros necessários para cada um deles. Agora, se fossem 100, 200 ou mais, certamente a história seria outra. O protocolo DHCP faz exatamente isto, por meio dele um servidor é capaz de distribuir automaticamente endereços de IP diferentes a todos os computadores à medida que Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 9 eles fazem a solicitação de conexão com a rede. Essa distribuição dos IPs é feita em um intervalo pré-definido configurado no servidor. Sempre que uma das máquinas for desconectada o IP ficará livre para o uso em outra. Você já deve ter ouvido que recebe um endereço de IP diferente para cada conexão de internet, certo? Este é um fato cujo responsável é o DHCP combinado com protocolos diferentes. 2.3 Como ele faz isso? Resumidamente, utilizando um modelo cliente-servidor, o DHCP faz o seguinte: ● Quando um cliente conecta-se a uma rede ele envia um pacote com um pedido de configurações DHCP. ● O servidor DHCP gerencia uma faixa fixa de IPs disponíveis juntamente com as informações e parâmetros necessários (gateway padrão, nome de domínio, DNS, etc). ● Quando este servidor recebe um pedido, ele entrega um destes endereços e configurações para o cliente. 2.4 Modos de Funcionamento. Ele pode operar de três formas: automática, dinâmica e manual. Automático - No qual uma quantidade de endereços de IP (dentro de uma faixa) é definida para ser utilizada na rede. Neste caso, sempre que um dos computadores de uma rede solicitar a conexão com ela, um destes IPs será designado para a máquina em questão. Dinâmico - Na dinâmica o procedimento é bem parecido com o efetuado pela automática, porém a conexão do computador com determinado IP é limitada por um período de tempo pré-configurado que pode variar conforme desejado pelo administrador da rede. Manual - No modo manual o DHCP aloca um endereço de IP conforme o valor de MAC (Medium Access Control) de cada placa de rede de forma que cada computador utilizará apenas este endereço de IP. Utiliza-se este recurso quando é necessário que uma máquina possua um endereço de IP fixo. Como o DHCP possui suporte para diversas plataformas, ele traz uma solução eficiente e fornece uma grande ajuda para os administradores de rede. Agora você já Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 10 sabe o que é e o que faz este protocolo de rede, esperamos que todas as dúvidas referentes ao assunto tenham sido respondidas de forma satisfatória e até a próxima! 2.5 Instalando e Configurando o DHCP Agora vamos colocar o que aprendemos em prática. A instalação do DHCP no Servidor Linux é feita através do comando: Após a conclusão da instalação vamos aos parâmetros de configuração. O arquivo de configuração vem com uma série de regras comentadas a fim de explicar seu funcionamento, para que o arquivo não fique poluído vamos gerar uma copia do arquivo original que se encontra em “/etc/dhcp/dhcpd.conf” e recriá-lo com os comandos abaixo: Gerando copia: Após fazer a copia do arquivos vamos remover o original com o comando: Após renomear vamos agora recriar nosso arquivo já inserindo as novas regras: Com o arquivo aberto vamos colocar as seguintes regras: INTERFACES="eth0"; ddns-update-style none; Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 11 default-lease-time 600; max-lease-time 7200; authoritative; subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.2 192.168.0.50; #Define Range que será passado option routers 192.168.0.19; # Informa Gateway que será passado option domain-name-servers 192.168.0.19;#DNS option broadcast-address 192.169.0.255; } MiniCurso-01 { hardware ethernet 00:1B:B9:6F:03:84; fixed-address 192.168.0.2; } Minicurso-02 { hardware ethernet 00:00:86:3B:AD:96; fixed-address 192.168.0.3; } Após a criação do arquivo não podemos esquecer de dar permissão para que o mesmo seja executado. Para isso devemos executar o comando: OBS – Para que as regras sejam carregadas reiniciem o serviço de DHCP: 3 Firewall (IPTABLES) Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 12 Apartir do Kernel 2.4 o Linux traz uma inovação no que diz respeito a ferramenta de firewall padrão do sistema. Bom, como já estamos no kernel 2.6.x, estabilizado no mercado e já sendo utilizado por diversos servidores espalhados pela web, finalmente podemos falar do IPTABLES. 3.1 O que é IPTABLES? A definição que esta no manual do iptables é esta: Iptables é um poderoso Firewall utilizado para criar, manter e inspecionar as tabelas de filtro de pacotes ip no kernel do linux. Foi desenvolvida por Paul Russel, desenvolvedor do ipchains. Para que se possa manipular isso de forma eficiente, o iptables criou uma serie de tabelas e cada uma contém chains (cadeias, rotinas) pré-definidas ou criadas pelo usuário que são executadas à medida que os pacotes chegam ao sistema operacional. Abaixo elas estão definidas: 1. raw - Essa eu nunca usei e por isso não tenho muito conhecimento, porém lendo na documentação disponível on-line da iptables-tutorial eles descrevem que ela tem uma única finalidade que é a de marcar pacotes que não devem ser manipulados pelo sistema de rastreamento de conexões (conntrack). Ela possui duas chains disponíveis que são prerouting e output. 2. mangle - Esta aqui é muito utilizada para a manipulação de pacotes. Geralmente se usa para mudar (mangle) algum valor como ToS, as marcações FW, TTL entre outros. É aqui que eu por exemplo marco os pacotes para um tratamento diferenciado de QoS em meu proxy/gateway! É altamente recomendado NÃO REALIZAR NENHUM FILTRO nesta tabela, já que existe uma com essa finalidade! Ela possui cinco chains disponíveis que são prerouting, input, forward, output e postrouting. 3. nat - A função desta tabela é bem sugestiva e ela deve ser utilizada para as necessidades de tradução de endereços de rede (Network Address Translation). É nesta tabela que iremos colocar as regras para compartilhar uma conexão de internet (Masquerade, SNAT) com uma LAN, aqui iremos criar a possibilidade de alguém localizado na internet acesse um recurso interno da DMZ (como um servidor web) e coisas desse genero. Ela possui três chains disponíveis que são prerouting, postrouting e output. 4. filter - E finalmente temos a tabela filter! Essa é a que deve ser usada para filtrar pacotes, ou seja, permitir ou restringir o acesso! É aqui que você irá verificar a Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 13 direção de um pacote, o que ele contém e tomar uma ação com ele, seja aceitar ou rejeitar. Ela possui três chains dispoíveis que são input, forward e output. Agora você me pergunta "e isso tudo que você esta falando ai de prerouting, postouring, forward, para que serve?". Bom essas chains são utilizadas para propósitos específicos dentro do ciclo de vida de um pacote dentro do iptables e das decisões de roteamento do linux, e irei explica-lo agora: 1. prerouting - Esta chain é a primeira a ser processada pelo iptables em qualquer tabela! Ela tem esse nome pois ela é utilizada antes mesmo do kernel do linux tomar alguma decisão de roteamento baseado em seu endereço de origem/destino, marcas FW, etc. Então se você precisa fazer algo desse gênero, aqui é o local! 2. input - Esta é utilizada ÚNICA e SOMENTE para os pacotes que possuem o endereço de destino o computador/servidor local! Pacotes com outros destinos que não seja esse não serão afetados por essa chain! 3. forward - Pacotes que passam por aqui possuem endereço de destino que não seja o computador/servidor local! São pacotes destinados por exemplo para a sua LAN, para a internet ou para alguma outra rede que seu linux tenha conectado e que este seja responsável por fazer roteamento. Aqui você pode identificar esses pacotes. 4. output - Esta chain possui a função de inspecionar os pacotes gerados pelo computador/servidor local! Se você quer proibir que seu computador/servidor local faça ping aqui é o local (tabela filter)! 5. postrouting - De forma análoga a chain prerouting, esta possui função exatamente oposta a ela. Os pacotes que passam por aqui já tiveram sua decisão de roteamento tomada! Aqui é o local onde se pode aplicar o Masquerade, Snat, Dnat! Com o fluxograma abaixo eu imagino que esse monte de definições ficaram mais claras: Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 14 3.2 Exemplo de regras #!/bin/bash # /etc/etc/init.d/rc.firewall # Limpa e inicializa os modulos #****************************** iptables -F iptables -t nat -F iptables -t mangle -F modprobe iptable_nat # Mudando a politica padrao iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD ACCEPT # Proxy transparente (Redireciona para o squid) - eth1 -> Placa de rede da intranet Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 15 iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT -to-port 3128 # Compartilha Internet - eth0 -> Placa de rede da internet iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward # Liberando o loopback iptables -A INPUT -s 127.0.0.1 -j ACCEPT iptables -A INPUT -d 127.0.0.1 -j ACCEPT iptables -A OUTPUT -s 127.0.0.1 -j ACCEPT iptables -A OUTPUT -d 127.0.0.1 -j ACCEPT # DO SERVIDOR PRA FORA ###################### # Liberando o ftp iptables -A OUTPUT -p tcp --dport 20 -j ACCEPT iptables -A INPUT -p tcp --sport 20 -j ACCEPT iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp --sport 21 -j ACCEPT iptables -A OUTPUT -p udp --dport 21 -j ACCEPT # Liberando Terminal Server iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT iptables -A FORWARD -p tcp --sport 3389 -j ACCEPT iptables -A FORWARD -p udp --dport 3389 -j ACCEPT iptables -A FORWARD -p udp --sport 3389 -j ACCEPT #Liberando VNC iptables -A INPUT -p tcp --sport 5900 -j ACCEPT iptables -A OUTPUT -p tcp --dport 5900 -j ACCEPT Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 16 iptables -A OUTPUT -p udp --dport 5900 -j ACCEPT iptables -A INPUT -p udp --sport 5900 -j ACCEPT # Liberando SMTP UOL iptables -A FORWARD -p tcp --dport 465 -j ACCEPT iptables -A FORWARD -p udp --dport 465 -j ACCEPT iptables -A FORWARD -p tcp --sport 465 -j ACCEPT iptables -A FORWARD -p udp --sport 465 -j ACCEPT # Liberando POP UOL iptables -A FORWARD -p tcp --dport 995 -j ACCEPT iptables -A FORWARD -p udp --dport 995 -j ACCEPT iptables -A FORWARD -p tcp --sport 995 -j ACCEPT iptables -A FORWARD -p udp --sport 995 -j ACCEPT # Liberando DNS para o servidor iptables -A INPUT -p tcp --sport 53 -j ACCEPT iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT iptables -A OUTPUT -p udp --dport 53 -j ACCEPT iptables -A INPUT -p udp --sport 53 -j ACCEPT iptables -A INPUT -p tcp --sport 135 -j ACCEPT iptables -A OUTPUT -p tcp --dport 135 -j ACCEPT iptables -A OUTPUT -p udp --dport 135 -j ACCEPT iptables -A INPUT -p udp --sport 135 -j ACCEPT # Liberando HTTP para o servidor iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --sport 80 -j ACCEPT iptables -A INPUT -p tcp --sport 80 -j ACCEPT # Liberando no-ip iptables -A OUTPUT -p tcp --dport 8245 -j ACCEPT iptables -A OUTPUT -p tcp --dport 8245 -j ACCEPT Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 17 # Liberando ssh (22) para o servidor iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --sport 22 -j ACCEPT # Liberando ping para fora do servidor iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT # DE FORA PARA O SERVIDOR ######################### # Liberando DNS iptables -A INPUT -p tcp --dport 53 -j ACCEPT iptables -A OUTPUT -p tcp --sport 53 -j ACCEPT iptables -A INPUT -p udp --dport 53 -j ACCEPT iptables -A OUTPUT -p udp --sport 53 -j ACCEPT # Liberando acesso externo ao servidor por SSH (22) iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT # Liberando squid iptables -A INPUT -p tcp --dport 3128 -j ACCEPT iptables -A OUTPUT -p tcp --sport 3128 -j ACCEPT # Liberando ping vindo dos clientes internos iptables -A INPUT -s 192.168.0.0/24 -i eth1 -p icmp --icmp-type echorequest -j ACCEPT iptables -A OUTPUT -d 192.168.0.0/24 -o eth1 -p icmp --icmp-type echoreply -j ACCEPT # Protecoes contra ataques Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 18 iptables -A INPUT -m state --state INVALID -j DROP # Protecao contra Syn-floods iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT # Protecao contra port scanners ocultos iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit -limit 1/s -j ACCEPT # Protecao contra ping da morte iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT 4 Controle de Banda com Shaper (CBQ) Estamos chegando ao final deste minicurso e para finalizar vamos agora aprender a utilizar uma ferramenta muito importante o Shaper (CBQ) que possibilita fazermos um controle de banda que nos tempos atuais com a quantidade de coisas que temos na internet somada à falta de conscientização da maior parte dos usuários se torna fundamental. 4.1 Considerações iniciais: A grande vantagem do CBQ sobre outros, (traffic Shaper), é permitir o controle não só do tráfego de downstream trafego de entrada ou também conhecido como download), bem como o upstream ( trafego de saída também conhecido como upload). Isto é muito importante principalmente hoje onde temos conexões DSL (Digital Subscriber Line), sendo instaladas comumente na maior parte das organizações e compartilhadas entre vários computadores. Note que com raras exceções, uma das características da tecnologia DSL é ter uma diferença entre as taxas de transferência para o trafego que entra e o trafego que sai da sua máquina. Comumente o trafego de entrada é superior já que o fluxo de dados tende a ser maior no sentido servidor-cliente. Já no caso do trafego de saída, ele tende a ser apenas texto. Portanto no caso de prédios ou organizações, locais onde temos vários computadores compartilhando o mesmo link é recomendável limitar também o tráfego de saída, agora, suponhamos que numa destas máquinas seja instalado um servidor FTP, facilmente ele poderia ocupar todo o upstream e fatalmente acabaria por comprometer o uso da rede pelas outras estações! O CBQ também possibilita controlar o trafego sobre um determinado ip e não somente por interface como o traffic shaper faz. Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 19 4.2 Instalando e configurando. Para que possamos instalar o Shaper (CBQ) de forma automática devemos editar o arquivo sources.list adicionando a linha: deb http://archive.ubuntu.com/ubuntu/ hardy universe Podemos editar o arquivo através do comando: Após adicionar a linha citada acima devemos executar o comando: Agora estamos prontos para instalar o Shaper (CBQ). Para tal devemos executar o comando: Com o Shaper instalado devemos criar o arquivo de configuração. Nosso cenário continua sendo o mesmo citado anteriormente. Cenário: Internet Eth0 10.0.1.2 Eth1 192.168.0.1 Modem (ADSL) IP 10.0.1.1 MiniCurso 01 IP 192.168.0.2 MiniCurso 02 IP 192.168.0.3 MiniCurso 03 IP 192.168.0.4 MiniCurso 04 IP 192.168.0.5 MiniCurso 05 IP 192.168.0.6 MiniCurso 06 IP 192.168.0.7 Hub/Switch Com o Shaper instalado e o cenário definido vamos agora as regras para controle. Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 20 No CBQ, cada classe é configurada através de um arquivo. Os arquivos contendo as classes ficam em “/etc/shaper”. Os arquivos de limite de banda para download e upload são criados separadamente. Vamos agora criar o arquivo para limitar download, para isso execute o comando: Nele vamos colocar a seguinte regra: DEVICE=eth1,100Mbit,10Mbit RATE=128Kbit WEIGHT=128Kbit PRIO=5 RULE=192.168.0.0/24 BOUNDED=yes ISOLATED=yes Com o arquivo de limitação de banda para download criado vamos agora ao arquivo para limitação de upload. Execute o comando: E nele vamos colocar as seguintes regras: DEVICE=eth0,100Mbit,10Mbit RATE=32Kbit WEIGHT=3Kbit PRIO=5 RULE=192.168.1.9/24, BOUNDED=yes ISOLATED=yes OBS – No arquivo para limitação de banda de upload no final do IP deve conter a “,”. Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 21 Abaixo descrição das regras criadas para que todos possam entender o que foi feito. Device = o dispositivo que vai ser limitado Rate = a velocidade da banda Weight = a velocidade de tranferencia (normalmente divide a velocidade por 8 ou 10) Prio = prioridade da banda (5 é um numero padrao) Rule = ip ou rede a ser controlada (por ser assim tbm EX: 13.0.0.0/24) Bounded e Isolated = se tiver em "no" o usuário pode usar a banda excedente. Após a criação de todos os arquivos de configurações devemos compila-los, para tal devemos executar o comando: 4.3 Resolvendo erro -maxdepth no CQB Em algumas distribuições ao compilar ou iniciar o CBQ o mesmo apresenta uma mensagem “Warning” como se fosse um erro. Para corrigir este problemas devemos efetuar os seguintes procedimentos. Primeiro devemos acessar o arquivo do Shaper através do comando: Em seguida devemos edita-lo da seguinte forma: As linhas a serem alteradas são: DE: A) CLASSLIST=`find $1 \( -type f -or -type l \) -name 'cbq-*' \ -not -name '*~' -maxdepth 1 -printf "%f\n"| sort` B) DEVFIELDS=`find $1 \( -type f -or -type l \) -name 'cbq-*' \ -not -name '*~' -maxdepth 1| xargs sed -n 's/#.*//; \ Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 22 PARA: A) CLASSLIST=`find $1 -maxdepth 1 \( -type f -or -type l \) -name 'cbq-*' \ -not -name '*~' -printf "%f\n"| sort` B) DEVFIELDS=`find $1 -maxdepth 1 \( -type f -or -type l \) -name 'cbq-*' \ -not -name '*~'| xargs sed -n 's/#.*//; \ A mensagem mais especificamente é: warning: you have specified the -maxdepth option after a non-option argument (, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments. OBS: Na realidade não se trata de um erro e sim de um aviso/warning. Luan Gabriel Pereira Dotto – Gerente de TI – AmBev/ConsulTI Yuri Galvão Mendes – Gerente de Ti – GraficaLog Página 23