Raid

 Linux, Sistemas de Armazenamento  Comentários desativados em Raid
jan 252012
 

Redundant Array of Independent Drives, também denominado Redundant Array of Inexpensive Drives ou mais conhecido como simplesmente RAID ou ainda em português: Conjunto Redundante de Discos Independentes ou também Conjunto Redundante de Discos Econômicos ou ainda Arranjo Redundante de Discos Independentes, é um meio de se criar um sub-sistema de armazenamento composto por vários discos individuais, com a finalidade de ganhar segurança e desempenho.

Popularmente, RAID seriam dois ou mais discos (por exemplo, HD ou disco rígido) trabalhando simultaneamente para um mesmo fim, por exemplo, citando o exemplo de RAID-1 logo abaixo, serviria como um espelhamento simples, rápido e confiável entre dois discos, para fazer o backup de um disco em outro. Apesar do RAID oferecer segurança e confiabilidade na adição de redundância e evitar falhas dos discos, o RAID não protege contra falhas de energia ou erros de operação. Falhas de energia, código errado de núcleo ou erros operacionais podem danificar os dados de forma irrecuperável.

Índice

[esconder]

[editar] História

O RAID foi proposto em 1988 por David A. Patterson, Garth A. Gibson e Randy H. Katz na publicação “Um Caso para Conjuntos de Discos Redundantes Econômicos (RAID)”. Publicado na Conferência SIGMOD de 1988: pp. 109–16.

[editar] Vantagens

  1. Ganho de desempenho no acesso.
  2. Redundância em caso de falha em um dos discos.
  3. Uso múltiplo de várias unidades de discos.
  4. Facilidade em recuperação de conteúdo “perdido”.

[editar] Arquiteturas

[editar] Implementação Via software

Na implementação via software, o sistema operacional gerencia o RAID através da controladora de discos, sem a necessidade de um controlador de RAIDs, tornando-a mais barata.

Nesse tipo de implementação, todo o processamento necessário para o gerenciamento do RAID é feito pela CPU. Toda movimentação de dados(leitura e escrita) é feita por uma camada de software que faz a abstração entre a operação lógica (RAID) e os discos físicos, e é controlada pelo sistema operacional.

A configuração do RAID via software é feita pelo sistema operacional, que precisa ter implementado no próprio núcleo a utilização de RAIDs via software. É possível criar RAIDs via software no Mac OS X, Linux, FreeBSD e no Windows (versão server).

[editar] Implementação Via hardware

Controladoras RAID em hardware usam layouts de disco proprietários (e diferentes). Por isso, normalmente não é possível misturar controladoras de fabricantes diferentes. Eles não utilizam recursos do processador. O BIOSBasic Input/Output System – pode iniciar (dar boot) por ela, e um integração maior com o driver de dispositivo pode oferecer um melhor tratamento de erros.

Uma implementação de RAID em hardware requer pelo menos uma controladora especialmente dedicada para isso. Em uma estação de trabalho (PC comum) isso pode ser uma placa de expansão PCI, PCI-e ou uma placa integrada à placa-mãe. Controladoras utilizando a maioria dos tipos de drive podem ser usadas – IDE/ATA, Serial ATA, SCSI, SSA, Fibre Channel, e às vezes uma combinação. A controladora e os discos utilizados devem estar isolados. Podem estar conectados diretamente ao computador, ou conectados via SAN. A controladora gerencia os drives e faz os cálculos de paridade necessários pelo nível de RAID escolhido.

A maioria das implementações em hardware proveem cache de leitura e escrita, o que (dependendo da carga de I/O) melhora a performance. Na maioria dos casos, o cache de escrita é não-volátil (protegido por bateria), e portanto, escritas pendentes não são perdidas no caso de uma falha no suprimento de energia. Implementações em hardware promovem performance garantida, não sobrecarregam o processador e podem suportar vários sistemas operacionais, já que a controladora apresentará ao sistema operacional um disco simples.

A maioria das implementações em hardware também suporta o “hot-swapping”, permitindo que discos com falha sejam substituídos enquanto o sistema está sendo executado.

[editar] Falso RAID

A implementação via software geralmente não possui uma fácil configuração. Já na implementação via hardware as controladoras tem um preço muito elevado. Então foi criada uma “controladora barata” que em vez de um chip controlador RAID você utiliza uma combinação de funções especiais na BIOS da placa e drivers instalados no sistema operacional .

[editar] Comparação entre as arquiteturas

Ao compararmos RAIDs por software e por hardware percebe-se que os implementados através de software são mais flexíveis que os via hardware. Por outro lado, os primeiros exigem da CPU mais tempo de processamento. Comparando os dispositivos de blocos, os em software também são flexíveis podendo ser usados em discos inteiros, partições ou outro dispositivo de bloco.

[editar] Níveis de RAID

Níveis de RAID são as várias maneiras de combinar discos para um fim.

[editar] RAID

RAID-0

O sistema RAID consiste em um conjunto de dois ou mais discos rígidos com dois objetivos básicos:

  1. tornar o sistema de disco mais rápido (isto é, acelerar o carregamento de dados do disco), através de uma técnica chamada divisão de dados (data striping ou RAID 0);
  2. tornar o sistema de disco mais seguro, através de uma técnica chamada espelhamento (mirroring ou RAID 1).

Essas duas técnicas podem ser usadas isoladamente ou em conjunto.

[editar] Vetor RAID 0 Linear

É uma simples concatenação de partições para criar uma grande partição virtual.

[editar] RAID 0 (Striping)

RAID-0

No striping, ou distribuição, os dados são subdivididos em segmentos consecutivos (stripes, ou faixas) que são escritos sequencialmente através de cada um dos discos de um array, ou conjunto. Cada segmento tem um tamanho definido em blocos. A distribuição, ou striping, oferece melhor desempenho comparado a discos individuais, se o tamanho de cada segmento for ajustado de acordo com a aplicação que utilizará o conjunto, ou array.

Há problemas de confiabilidade e desempenho. RAID-0 não terá desempenho desejado com sistemas operacionais que não oferecem suporte a busca combinada de setores. Uma desvantagem desta organização é que a confiança se torna geometricamente pior. Um disco SLED com um tempo médio de vida de 20.000 horas será 4 vezes mais seguro do que 4 discos funcionando em paralelo com RAID 0 (admitindo-se que a capacidade de armazenamento somada dos quatro discos for igual ao do disco SLED). Como não existe redundância, não há confiabilidade neste tipo de organização.

Vantagens:

  • acesso rápido as informações (até 50% mais rápido);
  • custo baixo para expansão de memória.

Desvantagens:

  • caso algum dos setores de algum dos HD’s venha a apresentar perda de informações, o mesmo arquivo que está dividido entre os mesmos setores dos demais HD’s não terão mais sentido existir, pois uma parte do arquivo foi corrompida, ou seja, caso algum disco falhe, não tem como recuperar;
  • não é usada paridade.

[editar] RAID 1

RAID-1

RAID-1

RAID-1 é o nível de RAID que implementa o espelhamento de disco, também conhecido como mirror. Para esta implementação são necessários no mínimo dois discos. O funcionamento deste nível é simples: todos os dados são gravados em dois discos diferentes; se um disco falhar ou for removido, os dados preservados no outro disco permitem a não descontinuidade da operação do sistema.

Vantagens:

  • caso algum setor de um dos discos venha a falhar, basta recuperar o setor defeituoso copiando os arquivos contidos do segundo disco;
  • segurança nos dados (com relação a possíveis defeitos que possam ocorrer no HD).

Desvantagens:

  • custo relativamente alto se comparado ao RAID 0;
  • ocorre aumento no tempo de escrita;
  • não é usada paridade.

[editar] RAID 2

RAID 2 é similar ao RAID 4, mas armazena informação ECC (Error Correcting Code), que é a informação de controle de erros, no lugar da paridade. Este fato possibilita uma pequena protecção adicional, porém o RAID 2 ficou obsoleto pelas novas tecnologias de disco já possuírem este tipo de correcção internamente. O RAID 2 origina uma maior consistência dos dados se houver queda de energia durante a escrita. Baterias de segurança e um encerramento correto podem oferecer os mesmos benefícios

Vantagem:

  • usa ECC.

Desvantagem:

  • hoje em dia há tecnologias melhores para o mesmo fim.

[editar] RAID 3

RAID-3

O RAID 3 é uma versão simplificada do RAID nível 2. Nesse arranjo, um único bit de paridade é computado para cada palavra de dados e escrito em um drive de paridade. À primeira vista, pode parecer que um único bit de paridade dá somente detecção de erro, e não correção de erro. Para o caso de erros aleatórios não detectados, essa observação é verdadeira. Todavia, para o caso de uma falha de drive, ela provê correção total de erros de um bit, uma vez que a posição do bit defeituoso é conhecida. Se um drive falhar, o controlador apenas finge que todos os seus bits são “zeros”. Se uma palavra apresentar erro de paridade, o bit que vem do drive extinto deve ter sido um “um”, portanto, é corrigido.

A fim de evitar o atraso em razão da latência rotacional, o RAID 3 exige que todos os eixos das unidades de disco estejam sincronizados. A maioria das unidades de disco mais recentes não possuem a opção de sincronização do eixo, ou se são capazes disto, faltam os conectores necessários, cabos e documentação do fabricante.

Vantagens:

  • leitura rápida;
  • escrita rápida;
  • possui controle de erros.

Desvantagem:

  • Montagem difícil via software.

[editar] RAID 4

O RAID 4 funciona com três ou mais discos iguais. Um dos discos guarda a paridade (uma forma de soma de segurança) da informação contida nos discos. Se algum dos discos avariar, a paridade pode ser imediatamente utilizada para reconstituir o seu conteúdo. Os discos restantes, usados para armazenar dados, são configurados para usarem segmentos suficientemente grandes (tamanho medido em blocos) para acomodar um registro inteiro. Isto permite leituras independentes da informação armazenada, fazendo do RAID 4 um array perfeitamente ajustado para ambientes transacionais que requerem muitas leituras pequenas e simultâneas.

O RAID 4 assim como outros RAID’s, cuja característica é utilizarem paridade, usam um processo de recuperação de dados mais envolvente que arrays espelhados, como RAID 1. Este nível também é útil para criar discos virtuais de grande dimensão, pois consegue somar o espaço total oferecido por todos os discos, exceto o disco de paridade. O desempenho oferecido é razoável nas operações de leitura, pois podem ser utilizados todos os discos em simultâneo.

Sempre que os dados são escritos no array, as informações são lidas do disco de paridade e um novo dado sobre paridade deve ser escrito para o respectivo disco antes da próxima requisição de escrita ser realizada. Por causa dessas duas operações de I/O, o disco de paridade é o factor limitante do desempenho total do array. Devido ao facto do disco requerer somente um disco adicional para protecção de dados, este RAID é mais acessível em termos monetários que a implementação do RAID 1.

Vantagens:

  • taxa de leitura rápida;
  • possibilidade do aumento de área de discos físicos.

Desvantagens:

  • taxa de gravação lenta;
  • em comparação com o RAID 1, em caso de falha do disco, a reconstrução é difícil, pois o RAID 1 já tem o dado pronto no disco espelhado;
  • tecnologia não mais usada por haver melhores para o mesmo fim.

[editar] RAID 5

RAID-5

RAID-5

O RAID 5 é frequentemente usado e funciona similarmente ao RAID 4, mas supera alguns dos problemas mais comuns sofridos por esse tipo. As informações sobre paridade para os dados do array são distribuídas ao longo de todos os discos do array , ao invés de serem armazenadas num disco dedicado, oferecendo assim mais desempenho que o RAID 4, e, simultaneamente, tolerância a falhas.

Para aumentar o desempenho de leitura de um array RAID 5, o tamanho de cada segmento em que os dados são divididos pode ser optimizado para o array que estiver a ser utilizado. O desempenho geral de um array RAID 5 é equivalente ao de um RAID 4, excepto no caso de leituras sequenciais, que reduzem a eficiência dos algoritmos de leitura por causa da distribuição das informações sobre paridade. A informação sobre paridade é distribuída por todos os discos; perdendo-se um, reduz-se a disponibilidade de ambos os dados e a paridade, até à recuperação do disco que falhou. Isto causa degradação do desempenho de leitura e de escrita.

Vantagens:

  • maior rapidez com tratamento de ECC;
  • leitura rápida (porém escrita não tão rápida).

Desvantagem:

  • sistema complexo de controle dos HDs.

[editar] RAID 6

É um padrão relativamente novo, suportado por apenas algumas controladoras. É semelhante ao RAID 5, porém usa o dobro de bits de paridade, garantindo a integridade dos dados caso até 2 dos HDs falhem ao mesmo tempo. Ao usar 8 HDs de 20 GB cada um, em RAID 6, teremos 120 GB de dados e 40 GB de paridade.

Vantagem:

  • possibilidade falhar 2 HDs ao mesmo tempo sem perdas.

Desvantagens:

  • precisa de N+2 HDs para implementar por causa dos discos de paridade;
  • escrita lenta;
  • sistema complexo de controle dos HDs.

[editar] RAID 0 (zero) + 1

RAID-0+1

O RAID 0 + 1 é uma combinação dos níveis 0 (Striping) e 1 (Mirroring), onde os dados são divididos entre os discos para melhorar o rendimento, mas também utilizam outros discos para duplicar as informações. Assim, é possível utilizar o bom rendimento do nível 0 com a redundância do nível 1. No entanto, é necessário pelo menos 4 discos para montar um RAID desse tipo. Tais características fazem do RAID 0 + 1 o mais rápido e seguro, porém o mais caro de ser implantado. No RAID 0+1, se um dos discos vier a falhar, o sistema vira um RAID 0.

Ex: se os dois discos que possuam a sequencia A1, A3, A5 falharem ao mesmo tempo, haverá perda de dados. Se apenas uma das controladoras falhar, o sistema continua funcionando, mas sem outra tolerância a falha e sem o ganho de velocidade.

Vantagens:

  • segurança contra perda de dados;
  • pode falhar 1 dos HD’s, ou os dois HD’s do mesmo DiskGroup, porém deixando de ser RAID 0 + 1.

Desvantagens:

  • alto custo de expansão de hardware (custo mínimo = 4N HDs);
  • os drives devem ficar em sincronismo de velocidade para obter a máxima performance.

[editar] RAID 1+0

RAID-10

O RAID 1+0, ou 10, exige ao menos 4 discos rígidos. Cada par será espelhado, garantindo redundância, e os pares serão distribuídos, melhorando desempenho. Até metade dos discos pode falhar simultaneamente, sem colocar o conjunto a perder, desde que não falhem os dois discos de um espelho qualquer — razão pela qual usam-se discos de lotes diferentes de cada ‘lado’ do espelho. É o nível recomendado para bases de dados, por ser o mais seguro e dos mais velozes, assim como qualquer outro uso onde a necessidade de economia não se sobreponha à segurança e desempenho.

Vantagens:

  • segurança contra perda de dados;
  • pode falhar um ou dois dos HDs ao mesmo tempo, dependendo de qual avaria.

Desvantagens:

  • alto custo de expansão de hardware (custo mínimo = 2N HDs);
  • os drivers devem ficar em sincronismo de velocidade para obter a máxima performance.

[editar] RAID 50

RAID-50

É um arranjo híbrido que usa as técnicas de RAID com paridade em conjunção com a segmentação de dados. Um arranjo RAID-50 é essencialmente um arranjo com as informações segmentadas através de dois ou mais arranjos. Veja o esquema representativo abaixo:

Vantagens:

  • alta taxa de transferência;
  • ótimo para uso em servidores.

Desvantagens:

  • alto custo de implementação e expansão de memória.

[editar] RAID 100

RAID 100

O RAID 100 basicamente é composto do RAID 10+0. Normalmente ele é implementado utilizando uma combinação de software e hardware, ou seja, implementa-se o RAID 0 via software sobre o RAID 10 via Hardware.

[editar] Ver também

Commons
O Commons possui multimídias sobre RAID

[editar] Ligações externas

Tipos de emendas Fibra Óptica

 Clusterweb  Comentários desativados em Tipos de emendas Fibra Óptica
jan 202012
 

Emenda óptica consiste em uma junção permanente ou temporária de duas ou mais segmentos de fibras.  Serve para aumentar a extensão de um cabo óptico, fazer a mudança de tipo de cabo, conectar um equipamento ativo ou fazer manobras em um sistema de cabeamento estruturado.

Existem três tipos de emendas:

Emenda ótica por Fusão

 

Emenda por Fusão

Este processo não é exatamente simples ou rápido, e como o próprio nome diz, consiste em “fundir” uma fibra óptica à outra.

Neste tipo de emenda a fibra é introduzida limpa e clivada na máquina de fusão, para após o alinhamento apropriado, ser submetida à um arco voltáico que eleva a temperatura nas faces das fibras, o que provoca o derretimento das fibras e a sua soldagem. O arco voltáico é obtido a partir de uma diferença de potencial aplicada sobre dois eletrodos de metal. Após a fusão a fibra é revestida por resinas que tem a função de oferecer resistência mecânica à emenda, protegendo-a contra quebras e fraturas.

Após a proteção a fibra emendada é acomodada em recipientes chamados caixa de emendas. As caixas de emendas podem ser de vários tipos de acordo com a aplicação e o número de fibras. Umas são pressurizáveis ou impermeáveis, outras resistentes ao sol, para instalação aérea.

O custo de todo o material necessário para este tipo de emenda é alto, pois o processo de “Emenda Óptica por Fusão” exige um custo alto de investimento nos equipamentos para a sua operação. Entretanto, este processo agiliza as instalações e garante uma grande confiabilidade no sistema.

A clivagem, acima citada, é o processo de corte da ponta da fibra óptica. É efetuada a partir de um pequeno ferimento na casca da fibra óptica (risco), a fibra é tracionada e curvada sob o risco, assim o ferimento se propaga pela estrutura cristalina da fibra. A qualidade de uma clivagem deve ser observada com microscópio.

Emenda Mecânica

Emenda óptica Mecânica

Este tipo de emenda é baseado no alinhamento das fibras através de estruturas mecânicas (desenvolvidas para tal finalidade), que mantém estas fibras posicionadas frente a frente, sem uni-las definitivamente. Neste tipo de emenda as fibras também devem ser limpas e clivadas. Este tipo de emenda é recomendado para um número reduzido de emendas a realizar, pois o custo desses dispositivos é relativamente barato, além de serem reaproveitáveis, porém não é aconselhável utilizá-los em sistemas que exijam uma grande confiabilidade.

 

Emenda óptica por Conectorização

Emenda por Conectorização

Este processo é bem semelhante ao processo de Emenda Mecânica, onde duas fibras devem ser alinhadas e não unidas. Entretanto, em cada fibra é colocado um conector óptico e estes dois conectores são encaixados em um acoplador óptico de modo a tornar possível o alinhamento entre as fibras, sem uni-las definitivamente.

Isto é conseguido através do uso de outro tipo de conector chamado de Adaptador Óptico, esta emenda é executada de forma rápida, desde que os conectores já estejam instalados nos cordões ópticos.

Ele é também muito usado em acessórios ópticos chamados de Distribuidores Ópticos, onde fazem a interface entre um cabo vindo de uma sala de equipamentos e os equipamentos ativos instalados no andar, no Armário de Telecomunicações.

Veja os tipos de conectores para esta emenda clicando aqui.

Salvar e restaurar os compartilhamentos existentes do Windows

 Windows  Comentários desativados em Salvar e restaurar os compartilhamentos existentes do Windows
jan 192012
 

Para obter informações sobre como os administradores podem migrar dados com segurança e confiável de um servidor de arquivo para outro servidor de arquivo, visite o seguinte site:
Microsoft File Server Migration Toolkit

ImportanteEsta seção, método ou tarefa contém etapas que informam sobre como modificar o registro. No entanto, sérios problemas poderão ocorrer se você modificar o registro incorretamente. Portanto, certifique-se de que você siga estas etapas cuidadosamente. Para proteção adicional, faça backup do registro antes de modificá-lo. Em seguida, você pode restaurar o registro se ocorrer um problema. Para obter mais informações sobre como fazer backup e restaurar o registro, clique no número abaixo para ler o artigo na Base de dados de Conhecimento:

322756  Como fazer backup e restaurar o registro no Windows

Para salvar apenas o compartilhamento existente nomes e suas permissões no Windows, siga estas etapas.

ObservaçãoEste procedimento se aplica somente para compartilhamentos de NetBIOS e não para volumes Macintosh.

  1. Sobre a instalação existente do Windows que contém os nomes de compartilhamento e permissões que você deseja salvar, inicie o Editor do Registro (Regedt32.exe).
  2. Da subárvore HKEY_LOCAL_MACHINE, vá para a seguinte chave:
    SYSTEM\CurrentControlSet\Services\LanmanServer\Shares
  3. Salvar ou exportar a chave do Registro.
    • Para Windows NT e Windows 2000, clique em Salvar chave no menu registro.
    • Para Windows Server 2003, clique em Exportar no menu arquivo.
  4. Digite um novo nome de arquivo (uma extensão de arquivo não é necessária) e salve o arquivo para um disquete.
  5. Reinstale o Windows.
  6. Execute o Editor do Registro (Regedt32.exe).
  7. Da subárvore HKEY_LOCAL_MACHINE, vá para a seguinte chave:
    SYSTEM\CurrentControlSet\Services\LanmanServer\Shares
  8. Restaurar ou importar a chave do Registro.
    • Para Windows NT e Windows 2000, clique em Restaurar no menu registro.
    • Para Windows Server 2003, clique em Importar no menu arquivo.
  9. Digite o nome de arquivo e caminho do arquivo salvo nas etapas 3 e 4.

    Cuidado Esta etapa substitui os compartilhamentos que já existem no computador Windows com os nomes de compartilhamento e permissões que existem no arquivo que você estiverem restaurando. Você é avisado sobre isso antes de restaurar a chave.

  10. Reinicie o servidor.

Observação Após concluir este procedimento, se você decidir que você não deve ter restaurado chave compartilhamentos, reinicie o computador e pressione a barra de espaços para usar a última configuração válida. Após restaurar a chave de compartilhamentos, compartilhamentos podem ser usados por clientes de rede. Se você executar o comando net compartilhamentos no servidor, o servidor exibe os compartilhamentos; no entanto, File Manager não exibir os compartilhamentos. Para tornar File Manager ciente dos compartilhamentos recém-restaurados, crie qualquer novo compartilhamento no servidor. Gerenciador de arquivo exibe todos os outros compartilhamentos após você reiniciar o servidor ou parar e reiniciar o serviço do servidor.

Windows NT 3.5, se você clicar em Terminar compartilhamento no Gerenciador de arquivos, compartilhamentos restaurados ainda são exibidos, mas são esmaecidos.

Somente permissões para usuários de domínio são restauradas. Se um usuário local foi criado na instalação do Windows NT anterior, identificador de segurança exclusivo do usuário local (SID) é perdida. Permissões NTFS em pastas e arquivos não são afetadas quando você salva e restaurar a chave de compartilhamentos.

Observação: Este artigo não se aplica ao Windows Server 2008 ou Windows Server 2008 R2.

Problema replicação SYSVOL

 Windows  Comentários desativados em Problema replicação SYSVOL
jan 192012
 

Nas andanças da vida me deparei com um problema desagradável em uma tarefa aparentemente simples, eu tinha que promover um Member server para Domain Controler, uma tarefa aparentemente tranqüila não acham?

Eu também achei que ia ser, fiz tudo dentro das melhores praticas verifiquei log no DC que ja estava no resolvi alguns errinhos bobos, DNS estava trincando, network perfeita, até vírus eu me certifiquei.

Bom promovi o bendito Member server para DC, ai meu sono foi embora, após a maquina subir comecei a validar DNS, replicação, coloquei ele como GC tudo ótimo, nos logs apareceram erros de SysVol não dei muita importância achei que em meia hora a replicação completa tudo iria se acertar, bom…..

Verifique que no novo DC as pastas NetLogon, SysVol não estavam compartilhadas, problemaço, bom reinicie os servidores reinicie serviço pra la e pra cá e nada, vamos la comecei a procurar na internet muitas pessoas com este problema e ninguém com solução, quando resolvi dar uma olhada nos detalhes do LOG de erro de replicação da sysvol la esta va minha solução abaixo vou detalhar:

Faça o seguinte no seu novo DC que não esta com a pasta sysvol compartilhada entre no registro va até HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NtFrs\Parameters\Enable Journal Wrap Automatic Restore

Se a chave Enable Journal Wrap Automatic Restore não existir crie uma Dword.

Apos criada ou alterada insira o valor decimal nela decimal 1 e reinicie o serviço File replication service.

Feito isso a Sysvol será replicada para seu novo DC.

De uma olhada nos logs para ver se nao tem mais nenhum problema.

Algumas dicas não mexa nas permissões da pasta Sysvol, você pode ter problemas, também não compartilhe “na mão” a pasta sysvol isso pode te dar muita dor de cabeça.

Bom finalizando apos 3 dias problema resolvido mais uma vez, espero que tenha sido útil.

Servidores Linux, Squid e BlackList.

 Linux, Squid  Comentários desativados em Servidores Linux, Squid e BlackList.
jan 182012
 

Atualizando as blacklists

Além do filtro com base em palavras, o DansGuardian utiliza uma lista de sites proibidos, que sequer chegam a ser acessados. Por padrão, o DansGuardian vem com uma lista muito pequena e desatualizada, apenas como exemplo. Para efetivamente usar este recurso, é preciso baixar uma lista mais elaborada.

Você pode baixar uma lista longa e atualizada no http://urlblacklist.com/, o mesmo site que citei no tópico sobre o SquidGuard. As listas do UrlBlacklist são mais adequadas para uso no DansGuardian, pois incluem também listas de termos (que são usadas pelo DansGuardian para complementar o filtro estático baseado em URLs), mas ele possui a desvantagem de ser um serviço não-gratuito, onde você precisa assinar o serviço para ter acesso completo às listas.

O link completo para a versão mais recente é:
http://urlblacklist.com/cgi-bin/commercialdownload.pl?type=download&file=bigblacklist

Para instalar, basta descompactar o arquivo e mover o conteúdo para dentro da pasta “/etc/dansguardian/”, substituindo a pasta “/etc/dansguardian/blacklists” existente:

$ tar -zxvf bigblacklist.tar.gz
# cp -a –reply=yes blacklists/ /etc/dansguardian/

Depois de instalar o arquivão completo, você pode usar o script de atualização, disponível no site, para baixar atualizações de forma automática. Baixe-o em:
http://urlblacklist.com/downloads/UpdateBL

Basta ativar a permissão de execução e executá-lo. Em algumas distribuições é preciso criar a pasta “/var/lib/lrpkg/”, onde ele guarda os logs. Sem esta pasta, ele exibe um erro e não conclui a atualização.

# mkdir -p /var/lib/lrpkg/
# chmod +x UpdateBL
# ./UpdateBL

O pacote inclui várias listas diferentes, separadas por assunto. Assim como na lista do Shalla’s, as listas incluem muitos assuntos inocentes como, “cellphones”, “sports” e “childcare” (saúde infantil). Ele não é uma “blacklist” no sentido estrito da palavra, mas sim um conjunto de listas que incluem também sites sobre conteúdos diversos. A idéia aqui é que você pode bloquear todos os assuntos desejados.

Dentro de cada uma das subpastas, você encontra três arquivos: domains (sites completamente bloqueados), expressions (palavras comumente encontradas em sites de conteúdo impróprio) e urls (páginas específicas, dentro de sites permitidos). Para ativar o uso das blacklists, edite os arquivos “/etc/dansguardian/bannedsitelist” e “/etc/dansguardian/bannedurllist“, adicionando (ou descomentando) as linhas referentes às categorias que devem ser ativadas.

Para bloquear páginas de conteúdo adulto (adult), drogas (drugs), páginas pornográficas (porn) e warez, adicione (ou descomente) no arquivo “/etc/dansguardian/bannedurllist” as linhas:

.Include</etc/dansguardian/blacklists/adult/urls>
.Include</etc/dansguardian/blacklists/drugs/urls>
.Include</etc/dansguardian/blacklists/porn/urls>
.Include</etc/dansguardian/blacklists/warez/urls>

No arquivo “/etc/dansguardian/bannedsitelist” vão as linhas:

.Include</etc/dansguardian/blacklists/adult/domains>
.Include</etc/dansguardian/blacklists/drugs/domains>
.Include</etc/dansguardian/blacklists/porn/domains>
.Include</etc/dansguardian/blacklists/warez/domains>

Você pode usar também os arquivos com expressões proibidas, incluídos no pacote para reforçar a lista adicional, com os termos em português, que já ativamos anteriormente. Para isso, abra novamente o arquivo “/etc/dansguardian/bannedphraselist” e adicione as linhas:

.Include</etc/dansguardian/blacklists/adult/expressions>
.Include</etc/dansguardian/blacklists/drugs/expressions>
.Include</etc/dansguardian/blacklists/porn/expressions>
.Include</etc/dansguardian/blacklists/warez/expressions>

Faça o mesmo com outras categorias que quiser adicionar.

Adicionando repositório ISO no XenServer

 XenServer  Comentários desativados em Adicionando repositório ISO no XenServer
jan 162012
 

Olá Pessoal, hoje vou fazer um breve tutorial explicando como criar um repositório ISO local no Xen Server para instalação de VM utilizando a imagem localmente, isso facilita a instalação e não necessita de acesso a internet.

Bem vamos lá:
Primeira mente autentique-se no SSH e então execute:

mkdir -p /var/opt/xen/iso_import

 

Pronto, criamos a pasta onde serão inseridas as imagens, após execute:

xe sr-create name-label=ISOs type=iso device-config:location=
/var/opt/xen/iso_import device-config:legacy_mode=true content-type=iso

Em seguida:

xe-mount-iso-sr /var/opt/xen/iso_import

Este comando irá então montar a pasta como repositório de arquivos.
Pronto, agora basta inserir as imagens (isos) dentro da pasta: /var/opt/xen/iso_import

Ao concluir todo esse procedimento, imediatamente já será inserido no Xen Center o Storange ISOs como mostra a figura abaixo:

E também no processo de instalação de um novo VM, também ira aparecer as suas imagens na lista de ISSO Image:

Pronto, agora você já pode instalar VMs utilizando a imagem do OS,
Bem é isso, em breve novos tutoriais !

Migrando de Windows Server 2003 para Windows Server 2008 R2

 Windows  Comentários desativados em Migrando de Windows Server 2003 para Windows Server 2008 R2
jan 162012
 

Migrando de Windows Server 2003 para Windows Server 2008 R2

Temos algumas formas para fazer uma migração de um servidor executando o Windows Server 2003 R2 para Windows Server 2008 R2 com o Active Directory instalado, porém algumas recomendações:

1) Se for migrar de 2003 R2 para 2008 R2 usando o mesmo servidor (in place) só será possível se o Windows Server 2003 R2 for 64 bits, uma vez que o Windows Server 2008 R2 só vem com suporte a X64.

2) Se o Windows Server 2003 R2 for 32 bits só será possível migrar para o Windows Server 2008 R2 usando um novo servidor.

3) É importante também cuidar o idioma dos Sistemas Operacionais.

4) Recomendamos ainda verificar toda a compatibilidade de hardware e software antes de começar sua migração.

5) Não esqueça de fazer os devidos backups.

Migrando Windows Server 2003 R2 32 Bits para Windows Server 2008 ( In Place)

Neste exemplo vamos usar o DVD do Windows Server (não R2) devido a compatibilidade de arquitetura 64 e 32, mas lembramos que o processo é idêntico)

1) Insira o DVD do Windows Server 2008 no servidor com o Windows Server 2003 R2 > clique em Instalar agora

clip_image002

2) Clique em Conectar para obter as atualizações mais recentes para instalação

clip_image004

3) Selecione a versão do Windows a ser instalado > Avançar

clip_image006

4) Aceite os Termos > Avançar

clip_image008

5) Selecione Atualização

clip_image010

6) Checando a compatibilidade

clip_image012

7) Avançar

clip_image014

8) Agora é só aguardar ( Deve levar horas)

clip_image016

9) Ao finalizar a instalação, abra o console do seu Active Directory e toda sua estrutura estará OK. Verifique também as GPOs e faça os testes já conhecidos em cima do seu AD.

 

Migrando Windows Server 2003 R2 32 Bits para Windows Server 2008 R2 usando dois servidores

 

Para realizar este processo, temos alguns novos requisitos, além dos já citados no início deste tópico.

Vamos aos novos requisitos:

1) Em um servidor temos o Windows Server 2003 R2 (32 bits) e no novo servidor, o Windows Server 2008 R2 que só temos em 64 bits.

2) Temos o Active Directory instalado somente no servidor com o Windows Server 2003 R2.

3) Com o Windows Server 2008 R2 já instalado no Servidor novo, ingresse este no domínio do Windows Server 2003 R2.

No servidor Windows Server 2003 R2 execute os seguintes passos:

1) Acesse o console do Active Directory > clique com o botão direito do mouse sobre Aumentar nível funcional do domínio…

clip_image018

2) Selecione Windows Server 2003 > clique em Aumentar

clip_image020

3) Nível aumentado.

clip_image022

4) Vamos agora preparar o Domínio para receber o primeiro Domain Controller Windows Server 2003.

Insira o DVD do Windows Server 2008 R2 > no diretório Support > acesse o diretório adprep > execute os seguintes comandos:

adprep.32.exe /forestprep

clip_image024

2) Pressione C > ENTER

clip_image026

3) Processo em execução

clip_image028

4) Processo finalizado.

clip_image030

5) Execute

adprep.32.exe /domainprep

clip_image032

6) Processo finalizado.

clip_image034

7) Execute

adprep.32.exe /rodcprep

clip_image036

8) Execute

adprep.32.exe /domainprep /gpprep

Replicando o Active Directory do Windows Server 2003 R2 para o

Windows Server 2008 R2

 

Como você já deve ter percebido, todos os usuários serão autenticados pelo servidor com o Active Directory.

Esta centralização do Active Directory em um único servidor pode nos dar muito problema, uma vez que o nosso servidor do Active Directory sofra uma pane, todos os nossos usuários que autenticam nele ficarão sem acesso.

Para prevenir este possível problema você pode configurar outro servidor como Controlador de domínio adicional.

Para aplicar todo este recurso temos algumas dicas inicias:

1) Ingresse o servidor réplica do domínio principal (não esqueça que o DNS primário deverá ser o IP do seu servidor DNS local)

clip_image037

2) Servidor réplica ingressado ao domínio.

clip_image038

3) Após ingressar o Servidor réplica ao AD, ele irá aparecer no contêiner Computers.

clip_image040

4) Para iniciar a instalação do AD réplica > executar > dcpromo.exe

clip_image042

5) Marque Usar a instalação em modo avançado > Avançar

clip_image044

6) Clique em Avançar.

clip_image046

7) Como já temos uma floresta > marque Floresta existente > Adicionar um controlador de domínio a um existente > Avançar.

clip_image048

8) Automaticamente o domínio será localizado > clique em Definir e entre com as credenciais do usuário Administrador do domínio > clique em Avançar.

clip_image050

9) Clique em Avançar

clip_image052

10) Clique em Avançar

clip_image054

11) Um catálogo global é um controlador de domínio que armazena uma cópia de todos os objetos do Active Directory em uma floresta. O catálogo global armazena uma cópia completa de todos os objetos no diretório para seu domínio host e uma cópia parcial de todos os objetos para todos os outros domínios na floresta, conforme mostrado na figura a seguir.

Marque Catálogo Global > Avançar.

clip_image056

12) Selecione Replicar dados pela rede de um controlador de domínio existente > Avançar.

clip_image058

13) Selecione o Controlador de domínio > Avançar

clip_image060

14) Selecione um local para o banco de dados, log e SYSVOL > Avançar.

clip_image062

15) Informe uma senha para restauração > Avançar.

clip_image064

16) Clique em Avançar.

clip_image066

17) Replicando dados.

clip_image068

18) Clique em Concluir.

clip_image070

19) Console do Active Directory no Server 2003 (principal)

clip_image072

GPOs no Server 2003

clip_image074

20) Console do Active Directory no Server 2008 R2

clip_image076

GPOs Server 2008 R2

clip_image078

 

Instalando ferramentas de suporte no Windows Server 2003 R2

 

1) Ainda no Servidor Windows Server 2003 R2 > insira o CD de instalação do Windows Server 2003 R2 > na pasta Support\Tools > execute o arquivo SUPTOOLS.MSI para instalar algumas ferramentas.

clip_image080

2) Ferramentas já instaladas > acesse Windows Support Tools > Command Prompt

clip_image082

3) Vamos agora através do comando netdom query fsmo verificar nosso schema. Observe que todas as funções fazer parte do server2003.

clip_image084

4) No servidor Windows Server 2003 R2 vamos então transferir todas as funções mostradas na figura acima para o novo servidor executando o Windows Server 2008 R2.

 

Transferindo funções:

Vamos agora transferir as 5 regras de operações do Active Directory, essas regras também são conhecidas como FSMO Rules (Flexible Single Master Operation). Essas regras são essenciais para a saúde do AD e o bom funcionamento do AD.

Nosso objetivo é transferir essas 5 regras para o controlador de domínio Windows Server 2008 R2.

Primeiro vamos listar as 5 regras de descobrir qual os controladores de domínio tem propriedade sobre elas para isso vamos executar o comando NETDOM QUERY FSMO.

O utilitário NETDOM já foi instalado quando colocamos as ferramentas de suporte no tópico já apresentado.

Vamos agora utilizar o utilitário NTDSUTIL que é uma ferramenta de administração avançada do Active Directory para realizar a transferência.

a) Acesse Menu Iniciar > Windows Support Tools > Command Prompt

Execute os seguintes comandos:

1) ntdsutil

2) roles

3) connections

4) connect to server server2008 ( onde server2008 é o hostname do seu servidor 2008)

5) q

6) transfer schema master

7) Confirme SIM

clip_image086

b) Digite:

1) transfer PDC

2) Confirme SIM

clip_image088

c) Digite:

1) transfer domain naming master

2) Confirme SIM

clip_image090

d) Digite:

1) transfer RID master

2) Confirme SIM

clip_image092

e) Digite:

1) transfer infrastructure master

2) Confirme SIM

clip_image094

13) Execute netdom query fsmo > para verificar que foram transferidas todas as funções para o servidor Windows Server 2008 R2.

clip_image096

 

Rebaixando o AD do Windows server 2003 R2

 

1) Execute:

clip_image098

2) Avançar

clip_image100

3) Não marque a opção “Este servidor é o último controlador de domínio no domínio” > Avançar

clip_image102

4) Digite uma nova senha para o Administrador local do Servidor 2003 > Avançar

clip_image104

5) Avançar

clip_image106

6) Removendo

clip_image108

7) AD removido > Concluir.

clip_image110

8) Console do AD no Windows Server 2008 R2, observe que agora o SERVER2003 não é mais membro de Domain Controller mas de Computers.

clip_image112

clip_image114

Clusters de alta disponibilidade.

 Linux, Redes  Comentários desativados em Clusters de alta disponibilidade.
jan 132012
 

Em vez de montar um único servidor com componentes redundantes, existe também a opção de usar um cluster de alta disponibilidade (chamados de “high-availability clusters” ou “failover clusters”), onde são usados dois servidores completos, onde a única função do segundo servidor é assumir a posição do primeiro em caso de falhas (modo chamado de ativo/passivo), diferente de um cluster com balanceamento de carga, onde os servidores dividem as requisições (ativo/ativo).

Existem diversas soluções para clusters de alta disponibilidade. Entre as soluções abertas, uma das mais usadas é o projeto Linux-HA (High-Availability Linux, disponível no http://www.linux-ha.org), que desenvolve o heartbeat, um daemon responsável por monitorar o status dos servidores do cluster e permitir que o segundo servidor assuma as funções do primeiro em caso de pane.

Cada um dos servidores possui pelo menos duas placas de rede, o que permite que eles sejam simultaneamente ligados à rede e ligados entre si através de um cabo cross-over ou de um switch dedicado. A conexão interna é usada pelo heartbeat para as funções de monitoramento e sincronismo dos processos, de forma que o segundo servidor possa assumir imediatamente a função do primeiro quando necessário, assumindo o endereço IP anteriormente usado por ele.

É comum também o uso de uma terceira interface de rede em cada servidor (ligada a um switch separado), destinada a oferecer uma conexão de backup com a rede. Isso permite eliminar mais um possível ponto de falha, afinal, de nada adianta ter servidores redundantes se o switch que os liga à rede parar de funcionar. 🙂

Em geral, o heartbeat é usado em conjunto com o Drbd (http://www.drbd.org), que assume a função de manter os HDs dos dois servidores sincronizados, como uma espécie de RAID 1 via rede. Ao usar o Drbd, o HD do segundo servidor assume o papel de unidade secundária e é atualizado em relação ao do primeiro em tempo real. Quando o primeiro servidor pára, a unidade de armazenamento do segundo servidor passa a ser usada como unidade primária. Quando o servidor principal retorna, o HD é sincronizado em relação ao secundário e só então ele reassume suas funções.

Outra opção é utilizar uma SAN (veja a seguir) para que os dois servidores compartilhem a mesma unidade de armazenamento. Nesse caso, não é necessário manter o sincronismo, já que os dados são armazenados em uma unidade comum aos dois servidores.

Como pode ver, adicionar componentes redundantes, sejam fontes, HDs ou servidores adicionais aumentam consideravelmente os custos. A principal questão é avaliar se o prejuízo de ter o servidor fora do ar por algumas horas ou dias durante as manutenções, acidentes e imprevistos em geral é maior ou menor do que o investimento necessário.

Um pequeno servidor de rede local, que atende a meia dúzia de usuários em um pequeno escritório dificilmente precisaria de redundância, mas um servidor de missão-crítica (como no caso de um banco) com certeza precisa. Cada nível de redundância adiciona um certo valor ao custo dos servidores, mas reduz em certa proporção o tempo de downtime.

A disponibilidade do servidor é genericamente medida em “noves”. Um nove indica uma disponibilidade de 90%, ou seja, uma situação em que o servidor fica fora do ar até 10% do tempo (imagine o caso de uma máquina instável, que precisa ser freqüentemente reiniciada, por exemplo), o que não é admissível na maioria das situações.

Com dois noves temos um servidor que fica disponível 99%, o que seria uma boa marca para um servidor “comum”, sem recursos de redundância. Por outro lado, uma disponibilidade de 99% significa que o servidor pode ficar fora do ar por até 7 horas e 18 minutos por mês (incluindo todas as manutenções, quedas de energia, operações de backup que tornem necessário parar os serviços e assim por diante), o que é tolerável no caso de uma rede local, ou no caso de um servidor que hospeda um site fora da área de comércio eletrônico, mas ainda não é adequado para operações de missão crítica.

Para adicionar mais um nove, atingindo 99.9% de disponibilidade (o famoso “three nines”), não é possível mais contar apenas com a sorte. É necessário começar a pensar nos possíveis pontos de falha e começar a adicionar recursos de redundância. Entram em cena as fontes redundantes, o uso de uma controladora RAID com suporte a hot-swap, uso de um nobreak com boa autonomia para todo o equipamento de rede, de forma que o servidor continue disponível mesmo durante as quedas de luz, e assim por diante. Afinal, 99.9% de disponibilidade significa que o servidor não fica fora do ar por mais de 43 minutos por mês.

No caso de servidores de missão crítica, qualquer interrupção no serviço pode representar um grande prejuízo, como no caso de instituições financeiras e grandes sites de comércio eletrônico. Passa então a fazer sentido investir no uso de um cluster de alta disponibilidade e em links redundantes, de forma a tentar atingir 99.99% de disponibilidade. Esta marca é difícil de atingir, pois significa que o servidor não deve ficar mais do que 4 minutos e meio (em média) fora do ar por mês, incluindo aí tudo o que possa dar errado.

Como sempre, não existe uma fórmula mágica para calcular o ponto ideal (é justamente por isso que existem consultores e analistas), mas é sempre prudente ter pelo menos um nível mínimo de redundância, nem que seja apenas um backup atualizado, que permita restaurar o servidor (usando outra máquina) caso alguma tragédia aconteça.

Freeradius – servidor radius eficiente e completo

 Linux, Wireless  Comentários desativados em Freeradius – servidor radius eficiente e completo
jan 132012
 

Aviso

Este artigo pode ser distribuído, publicado, impresso e copiado de todas as formas e meios possíveis, desde que se mantenha o nome, a página web e o e-mail do autor no cabeçalho, em local visível, abaixo do título e com a letra maior ou igual a usada no texto.

Meu primeiro contato com o serviço radius foi com uma solução comercial chamada Steel-Belted Radius (http://www.funk.com/radius/), na época ele atendia minhas necessidades. O único problema era que eu não podia compartilhar a base de dados com outras aplicações e isso estava ficando chato: a senha do e-mail era uma, a senha de acesso outra, não dava pra criar formulários de mudança de senha on-line e fazer uma migração de base de dados e mantendo o software era inviável.

Quando decidi migrar para uma solução livre, comecei analisar tecnicamente os produtos do mercado, gostei de dois: freeradius e openradius, porém o freeradius ganhou favoritismo, por que? Você vai saber nesse artigo!

As configurações de hardware não são muito relevantes, um servidor radius não é pesado nem exigente. Seu velho 486 daria pro gasto!

SOFTWARES USADOS NO ARTIGO

  • Linux: Slackware 10.0 (instalação Full)
  • Freeradius 1.0.1
  • MySQL 3.xx ou 4.xx

Esse artigo é uma abordagem completa do serviço radius, tire um tempo para ler e preste atenção! Bons lucros com o conhecimento (aceito gratificações$$!!!).

Instalação e comandos

Quando eu escrevia este artigo, o link usado para download da versão atualizada do Freeradius era:

ftp://ftp.freeradius.org/pub/radius/freeradius-1.0.1.tar.gz

Caso este link esteja quebrado hoje, tente procurar no site www.freeradius.org a versão atual para download ou entre no endereço ftp://ftp.freeradius.org/pub e procure pelo pacote diretamente.

# cd /usr/local/src
# wget ftp://ftp.freeradius.org/pub/radius/freeradius-1.0.1.tar.gz
# tar -xvzf freeradius-1.0.1.tar.gz
# cd freeradius-1.0.1/
# ./configure
# make
# make install

Como você pode ver, na instalação não há segredos, se você se deparar com algum problema na hora de compilar, consulte o comando:

# ./configure –help

para ver opções que possam burlar os erros.

Por exemplo, se ele reclamar a ausência do modulo kerberos, você pode usar a opção –without-krb5 no ./configure para resolver, digo isso pois uma vez encarei esse problema na distribuição Fedora.

O simples ./configure fará com que todos os módulos do freeradius que se comunicam com outras tecnologias como MySQL, LDAP, etc sejam instalados, alguns poderão pedir bibliotecas, mas no Slackware 10 isso não acontece.

Ao usar simplesmente ./configure antes de compilar, ele irá programar o freeradius para ser instalado em /usr/local nas subpastas de sistema, tipo:

  • /urs/local/etc -> arquivos de configuração;
  • /usr/local/sbin -> comandos do administrador;
  • /usr/local/share -> arquivos de dicionário de radius e outros arquivos compartilhados;
  • /usr/local/var -> arquivos de pid e logs;

e assim por diante. Então, se nesse artigo eu falar da localização de algum comando ou arquivo de configuração, farei considerando que seu ./configure não alterou o “–prefix” padrão (/urs/local).

Os seguintes comandos serão adicionados ao seu Linux:

  • /usr/local/bin/radclient
  • /usr/local/bin/radeapclient
  • /usr/local/bin/radlast
  • /usr/local/bin/radrelay
  • /usr/local/bin/radtest
  • /usr/local/bin/radwho
  • /usr/local/bin/radzap
  • /usr/local/bin/rlm_ippool_tool
  • /usr/local/bin/smbencrypt

Para o administrador:

  • /usr/local/sbin/check-radiusd-config
  • /usr/local/sbin/checkrad
  • /usr/local/sbin/radiusd
  • /usr/local/sbin/radwatch
  • /usr/local/sbin/rc.radiusd

Vejamos mais detalhes de como configurá-lo no próximo capítulo.

Arquivos de configuração detalhados

Configurar o freeradius é fácil. Vou descrever cada detalhe do radiusd.conf (/usr/loca/etc/raddb/radiusd.conf), que é necessário para você entender melhor e não perder tempo procurando ajuda em fóruns! A descrição precede os parâmetros, não comentei todos para não fugir do assunto.

1 – radiusd.conf

Arquivo de configuração principal responsável pelo daemon do radius e fazer inclusões dos demais arquivos de configuração.

# inicio radiusd.conf

prefix = /usr/local/src
exec_prefix = ${prefix}
sysconfdir = ${prefix}/etc
localstatedir = ${prefix}/var
sbindir = ${exec_prefix}/sbin
logdir = ${localstatedir}/log/radius
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
confdir = ${raddbdir}
run_dir = ${localstatedir}/run/radiusd
# variáveis definidas na instalação, essas opções
# foram disponibilizadas para que você não precise
# recompilar para mudar os arquivos de lugar
# você pode usar essas variáveis quando definir o
# valor de algum parâmetro ao longo desse arquivo.

log_file = ${logdir}/radius.log
# arquivo de log principal, nesse arquivo ficarão
# todas as mensagem de erro, tentativas de
# conexão, etc…

libdir = ${exec_prefix}/lib
# pasta de bibliotecas, se elas
# se encontrarem em varias pastas,
# separe as localizações
# por : , tipo: libdir = /usr/lib:/usr/local/lib

pidfile = ${run_dir}/radiusd.pid
# arquivo onde será armazenado o id
# do processo principal do freeradius

user = nobody
group = nobody
# definição do usuário e grupo dos processos filhos do radiusd
# se você não especificar, o usuário que deu partida
# será usado (root), se
# você usar o arquivo /etc/shadow para autenticação,
# defina o grupo como shadow, vale lembrar
# que o usuário que executa o radiusd deve ter permissão
# de escrita no diretório de log

max_request_time = 30
# define o tempo que o processo filho segura o pedido,
# caso o tempo limite seja atingido, o servidor retorna
# acesso negado. Por exemplo: se você define 2 segundos
# e usa um banco de dados mysql sobrecarregado que demora
# 5 segundos para concluir uma pesquisa, seu servidor nunca
# vai dar acesso a ninguém!

delete_blocked_requests = no
# se no parâmetro max_request_time você
# definiu o valor 30 segundos, e o cliente
# perdeu a paciência e enviou outra solicitação sem
# ter concluído a primeira,
# o freeradius não ficara fazendo trabalho
# repetitivo simultaneamente. Se você definir
# esse parâmetro como yes, ao chegar a segunda
# requisição do mesmo cliente com a mesma
# “pergunta”, ele desistirá da primeira para
# atender a nova solicitação.

cleanup_delay = 5
# esse valor funciona da seguinte maneira:
# se o NAS ou RAS enviou uma pergunta e
# a resposta foi perdida na rede, o NAS tornará
# fazer a pergunta, todo o processo de autenticação
# será realizado novamente. Para evitar isso o freeradius
# manter a resposta no cache pelo tempo definido aqui
# (em segundos), assim, se o pacote resposta for perdido
# e a pergunta for repetida, a resposta será imediata,
# usando assim o mínimo de processamento.

max_requests = 1024
# define o número máximo de
# requisições que o freeradius pode atender
# simultaneamente, somando todas as requisições
# atendidas pelos processos filhos, assim,
# se você tem 4 processo filhos, cada um
# poderá atender 256 perguntas simultaneamente
# ATENÇÃO: as respostas cacheadas pela opção
# cleanup_delay são contabilizadas. Se você colocou
# cleanup_delay com um valor alto, seu radius
# ficará exposto a um DOS

bind_address = *
# isso fará o freeradius escutar em
# um endereço especifico, * inclui todos
# os endereços ip do host, você pode
# usar um FQDN, mas antes tenha certeza
# de que a resolução de dns estará disponível
# no momento em que o servidor radius inicia

port = 0
# porta de escuta. Equipamentos antigos tem a porta
# 1645 como padrão de autenticação e 1646 como
# contabilidade. A RFC 2138 mudou essa porta para
# 1812 autenticação e 1813 contabilidade. Equipamentos
# novos provavelmente terá essa porta como padrão.
# 0 (zero) fará com que a porta seja pesquisada
# em /etc/services, esse parâmetro pode ser
# sobreposto pela opção -p do comando radiusd

#listen {
# ipaddr = *
# endereço ip ou FQDN, mesmos critérios
# usados em bind_address
# port = 0
# porta de escuta, mesmos critérios
# usados em port

#  Type of packets to listen for.
#  Allowed values are:
#    auth    listen for authentication packets
#    acct    listen for accounting packets
#
# type = auth
# tipo de escuta:
# auth -> autenticação
# acct -> contabilidade
#}
# Se você quiser que o freeradius escute
# a porta de autenticação em um ip, e
# a porta de contabilidade em outro, ou
# em postas distantes no mesmo ip, o
# modelo acima de listagem será útil
# Esse recurso apareceu a partir da versão
# 1.0 e resolve o problema se você
# tem equipamentos novos e antigos
# servidos pelo mesmo radius

hostname_lookups = no
# define se o nome DNS dos clientes
# será pesquisado a partir do ip. Se definir como yes,
# toda vez que uma requisição chegar de
# um endereço ip, o freeradius irá consultar
# o dns para usar o nome no log de atividades.
# o valor no é a melhor opção, não sobrecarrega
# o servidor DNS

allow_core_dumps = no
# ative essa opção para depurar erros no
# servidor, caso contrario deixe como está

regular_expressions = yes
extended_expressions = yes
# ativa ou desativa expressões regulares
# nos parâmetros dos pacotes, desativar
# é uma boa idéia embora o padrão seja
# yes

log_stripped_names = no
# registra nos logs os dados completos do
# campo User-Name do pacote de autenticação,
# se definido como yes, do jeito que chegar,
# será usado.

log_auth = no
# deseja logar atividades de autenticação?
# se você tem milhares de clientes logando
# simultaneamente, significa
# que seu log vai crescer muito com essa
# opção ativa. Eu sempre coloco yes pois
# fica fácil e rápido descobrir por que
# certo cliente (leigo) não consegue autenticar

log_auth_badpass = no
# Logar senhas quando a autenticação falhar?
# embora seja útil para dar suporte – usuário
# digitando senha incorretamente (branco, maiúsculas, etc…),
# a privacidade do usuário fica reduzida e uma brecha de segurança,
# todas as senhas serão registradas no log

log_auth_goodpass = no
# idêntica a opção acima, porém se
# aplica para autenticações bem sucedidas.

usercollide = no

lower_user = no
lower_pass = no
# essas duas opções são muito importantes:
# se o usuário deixar o CapsLock ligado,
# significa que não conseguirá se autenticar
# e isso significa uma insatisfação ou uma
# chamada desnecessária no suporte.
# Temos 3 opções: after, before e no
# suponhamos que eu informe meu login: PatrickBrandao
# “after” fará com que a autenticação
# seja primeiro testada com o valor
# informado, se falhar, aplica um lowercase
# nos valores e tenta novamente. Sendo a primeira
# tentativa com “PatrickBrandao” e a segunda com “patrickbrandao”
# “before” fará com que um lowercase seja
# aplicado antes de pesquisar a base de
# dados, que receberá “patrickbrandao”
# “no” desativa esse efeito passando para
# a base de dados o mesmo valor recebido: “PatrickBrandao”

nospace_user = no
nospace_pass = no
# as duas opções acima
# servem para retirar espaços de nome
# de usuário e senha. Os seus clientes
# podem, sem perceber, colocar
# um espaço no final ou no começo
# das credenciais, o que gera uma
# chamada desnecessária no suporte técnico
# três valores poderão ser escolhidos:
# after, before e no

checkrad = ${sbindir}/checkrad
# comando ao usar para checar conexões simultâneas

# sessão de segurança —————————-
security {
max_attributes = 200
# define o número máximo de atributos
# num pacote enviado para o servidor.
# um número muito baixo faria o servidor
# negar pacotes, número muito alto deixará
# o servidor vulnerável. O atacante pode emitir
# um pedido com um número exagerado
# de parâmetros e esgotar os recursos de memória

reject_delay = 1
# define o tempo de espera antes de enviar
# uma resposta de acesso negado.
# essa opção proteje seu servidor
# contra ataques de força bruta
# Escolha de 0 a 5, 0 (zero) fará com que
# a resposta seja enviada imediatamente

status_server = no
# permite ou nega o envio de pacotes
# de status do usuário. Não é muito importante
# mas alguns NAS’s com keep-alive podem
# precisar desse recurso para checar o
# status de uma sessão.

}

# sessão de proxy ——————————
proxy_requests = yes
$INCLUDE ${confdir}/proxy.conf

# configuração de clientes NAS —————

$INCLUDE ${confdir}/clients.conf
# quando falo de clientes NAS não
# estou me referindo a seus clientes de
# conexão discada, mas sim aos dispositivos
# em contato com eles que se encarregam de
# procurar o radius para validar o usuário,
# esses equipamentos podem ser RAS como
# cyclades, cisco, etc… ou mesmo serviços
# em qualquer servidor que se baseia numa
# autenticação com radius

# sessão de snmp —————————-

snmp = no
$INCLUDE ${confdir}/snmp.conf
# ativa o suporte a monitoramento por snmp
# no freeradius

# configuração de processos filhos ————————
thread pool {
start_servers = 5
# número de processos filhos a serem criados quando
# o serviço for iniciado

max_servers = 32
# número máximo de processos filhos
# atendendo solicitações

min_spare_servers = 3
max_spare_servers = 10
# regula o número de processos para manter
# um bom desempenho

max_requests_per_server = 0
# número máximo de solicitações feitas
# a um processo filho antes de ser destruído
# 0 (zero) para infinito, mas não recomendável
# pois um processo filho pode consumir recursos
# que nunca irá liberar, 250 é um bom valor.

}

# sessão de definição de módulos ———————–
modules {
# formato:
#    name [ instance ] {
#        config_item = value
#        …
#    }
# name -> se refere ao nome do
# modulo rlm_?????, muitos módulos
# são fornecidos com o freeradius, esse
# recurso permite que você crie seus próprios
# módulos.

pap {
encryption_scheme = crypt
}
# define o tipo de
# criptografia usada na autenticação PAP
# valores disponíveis:
#  clear: sem criptografia, texto plano
#  crypt: criptografia do unix
#  md5: criptografia MD5
#  sha1: criptografia SHA1
# padrão: crypt

chap {
authtype = CHAP
}
# adiciona suporte a autenticações
# usando CHAP

pam {
pam_auth = radiusd
}
# suporte PAM dos sistemas unix, configura
# o pamd em /etc/pam.d/ para usar esse tipo
# de autenticação

# autenticação baseada nas credenciais do sistema
# /etc/passwd e /etc/shadow
unix {
cache = no
# criar caches de dados de login?
# habilitar essa opção pode melhorar
# o desempenho se você tem muitos
# usuários de sistema

cache_reload = 600
# tempo em segundos para recarregar
# o cache de logins do sistema

# define a localização dos seus
# arquivos de autenticação de sistema
# encontra-se comentado, usando o
# valor padrão
#
#    passwd = /etc/passwd
#    shadow = /etc/shadow
#    group = /etc/group

radwtmp = ${logdir}/radwtmp
}

#  Extensible Authentication Protocol
$INCLUDE ${confdir}/eap.conf

# Micro$oft CHAP authentication
# esses módulos suportam MS-CHAP e MS-CHAPv2
mschap {
authtype = MS-CHAP
# protocolo M$ usado
#use_mppe = no
#require_encryption = yes
#require_strong = yes
#with_ntdomain_hack = no
#ntlm_auth = “/path/to/ntlm_auth –request-nt-key –username=%{Stripped-User-Name:-%{User-Name:-None}} –challenge=%{mschap:Challenge:-00} –nt-response=%{mschap:NT-Response:-00}”
}

# Lightweight Directory Access Protocol (LDAP)
# permite usa autenticação LDAP (Auth-Type := LDAP)
ldap {
server = “ldap.your.domain”
# identity = “cn=admin,o=My Org,c=UA”
# password = senhadnaqui
basedn = “o=My Org,c=UA”
filter = “(uid=%{Stripped-User-Name:-%{User-Name}})”
# base_filter = “(objectclass=radiusprofile)”

start_tls = no
# coloque yes se deseja usar tls para criptografar
# os dados nas conexões com o LDAP e
# configure e descomente os valores abaixo
# tls_cacertfile    = /path/to/cacert.pem
# tls_cacertdir        = /path/to/ca/dir/
# tls_certfile        = /path/to/radius.crt
# tls_keyfile        = /path/to/radius.key
# tls_randfile        = /path/to/rnd
# tls_require_cert    = “demand”

# default_profile = “cn=radprofile,ou=dialup,o=My Org,c=UA”
# profile_attribute = “radiusProfileDn”
access_attr = “dialupAccess”

dictionary_mapping = ${raddbdir}/ldap.attrmap
# define o arquivo de mapas de atributos
# do seu diretorio
ldap_connections_number = 5

# password_header = “{clear}”
# password_attribute = userPassword
# groupname_attribute = cn
# groupmembership_filter = “(|(&(objectClass=GroupOfNames) (member=%{Ldap-UserDn})) (&(objectClass=GroupOfUniqueNames) (uniquemember=%{Ldap-UserDn})))”
# groupmembership_attribute = radiusGroupName
timeout = 4
timelimit = 3
net_timeout = 1
# compare_check_items = yes
# do_xlat = yes
# access_attr_used_for_allow = yes
}

# —————————————-

# modulo Realm, para proxy
#  ‘realm/username’
realm IPASS {
format = prefix
delimiter = “/”
ignore_default = no
ignore_null = no
}
#  ‘username@realm’
realm suffix {
format = suffix
delimiter = “@”
ignore_default = no
ignore_null = no
}
#  ‘username%realm’
realm realmpercent {
format = suffix
delimiter = “%”
ignore_default = no
ignore_null = no
}
#  ‘domain\user’
realm ntdomain {
format = prefix
delimiter = “\\”
ignore_default = no
ignore_null = no
}

checkval {
item-name = Calling-Station-Id
check-name = Calling-Station-Id
data-type = string
#notfound-reject = no
}

# reescrita de pacotes. Usado para autorização e contabilidade
#attr_rewrite sanecallerid {
#    attribute = Called-Station-Id
# may be “packet”, “reply”, “proxy”, “proxy_reply” or “config”
#    searchin = packet
#    searchfor = “[+ ]”
#    replacewith = “”
#    ignore_case = no
#    new_attribute = no
#    max_matches = 10
#    ## If set to yes then the replace string will be appended to the original string
#    append = no
#}

preprocess {
huntgroups = ${confdir}/huntgroups
hints = ${confdir}/hints
with_ascend_hack = no
ascend_channels_per_line = 23
with_ntdomain_hack = no
with_specialix_jetstream_hack = no
with_cisco_vsa_hack = no
}

files {
usersfile = ${confdir}/users
acctusersfile = ${confdir}/acct_users

compat = no
}

detail {
detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d
detailperm = 0600
}
# detail auth_log {
# detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d
# detailperm = 0600
# }
# detail reply_log {
# detailfile = ${radacctdir}/%{Client-IP-Address}/reply-detail-%Y%m%d
# detailperm = 0600
# }
# detail pre_proxy_log {
# detailfile = ${radacctdir}/%{Client-IP-Address}/pre-proxy-detail-%Y%m%d
# detailperm = 0600
# }
# detail post_proxy_log {
# detailfile = ${radacctdir}/%{Client-IP-Address}/post-proxy-detail-%Y%m%d
# detailperm = 0600
# }
acct_unique {
key = “User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port”
}

#  Para Postgresql, use:        ${confdir}/postgresql.conf
#  Para MS-SQL, use:         ${confdir}/mssql.conf
#  For Oracle, use:         ${confdir}/oraclesql.conf
#
$INCLUDE  ${confdir}/sql.conf
# inclusão de arquivo de configuração contendo
# módulos de autenticação, sessão e contabilidade
# controlados em banco de dados SQL

# módulos responsáveis por controlar usuários conectados
# para evitar conexão simultânea quanto esta é
# usada
radutmp {
filename = ${logdir}/radutmp
username = %{User-Name}
case_sensitive = yes
check_with_nas = yes
perm = 0600
callerid = “yes”
}
radutmp sradutmp {
filename = ${logdir}/sradutmp
perm = 0644
callerid = “no”
}
attr_filter {
attrsfile = ${confdir}/attrs
}
counter daily {
filename = ${raddbdir}/db.daily
key = User-Name
count-attribute = Acct-Session-Time
reset = daily
counter-name = Daily-Session-Time
check-name = Max-Daily-Session
allowed-servicetype = Framed-User
cache-size = 5000
}
always fail {
rcode = fail
}
always reject {
rcode = reject
}
always ok {
rcode = ok
simulcount = 0
mpp = no
}
expr {
}
digest {
}
exec {
wait = yes
input_pairs = request
}
exec echo {
wait = yes
program = “/bin/echo %{User-Name}”
input_pairs = request
output_pairs = reply
#packet_type = Access-Accept
}

ippool main_pool {
range-start = 192.168.1.1
range-stop = 192.168.3.254
netmask = 255.255.255.0
cache-size = 800
session-db = ${raddbdir}/db.ippool
ip-index = ${raddbdir}/db.ipindex
override = no
maximum-timeout = 0
}

}

# controle de acesso, sessão e contabilidade ———–

# sessão instantiate – inicia módulos, se não for usar, não inicie.
instantiate {
exec
expr
#    daily
}

# sessão authorization – controla os módulos
# responsáveis por autorizar o acesso das
# requisições

authorize {
preprocess
#    auth_log
#    attr_filter
chap
mschap
#    digest
#    IPASS
#    suffix
#    ntdomain
#    eap
#    files
sql
#    etc_smbpasswd
#    ldap
#    daily
#    checkval
}

# Sessão authentication
# responsável por conferir o tipo de autenticação usado
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
#    digest
#    pam
#    unix
#    Auth-Type LDAP {
#        ldap
#    }
#    eap
}

#  Sessão Pre-accounting.  Decide qual tipo de contabilidade usar
preacct {
#    preprocess
#    acct_unique
#  home server as authentication requests.
#    IPASS
#    suffix
#    ntdomain

#
#  Read the ‘acct_users’ file
#    files
}

# Sessao Accounting.  Registra dados de contabilidade
accounting {
#    detail
#    daily
#    unix
#    radutmp
#    sradutmp
#    main_pool
sql
#    pgsql-voip
}

# Controle de sessão
# quando se faz o controle de sessão para
# evitar conexões simultâneas (impede o
# nome de usuário de se conectar varias vezes de
# locais diferentes ao mesmo tempo com o mesmo login)
session {
#    radutmp
#    sql
}

post-auth {
#    main_pool
#    reply_log
#    sql
#    Post-Auth-Type REJECT {
#        insert-module-name-here
#    }
}

pre-proxy {
#    attr_rewrite
#    pre_proxy_log
}

post-proxy {
#    post_proxy_log
#    attr_rewrite
#    attr_filter
eap
}
# fim radiusd.conf

2 – clients.conf

Responsável pela lista de clientes NAS que desfrutam do serviço radius.

# inicio clients.conf

client 127.0.0.1 {
secret = raioceleste
# segredo do servidor. Somente
# os NAS’s que conhecem esse
# segredo poderão fazer pedidos
# de autenticação. OBRIGATÓRIO

shortname = localhost
# nome do cliente. Normalmente
# você pode colocar uma parte do FQDN
# esse nome é usado no arquivo de log
# e referencias de contabilidade
# OBRIGATÓRIO

nastype = other
# define o tipo de NAS ó cliente.
# Muito importante pois um
# NAS especifico pode ter campos
# definidos nos arquivos de dicionários
# de parâmetros. OPCIONAL. Padrão: other
}

# o exemplo acima trata um cliente
# em especifico, mas você pode
# abrir uma rede inteira no freeradius

client 192.168.10.0/24 {
secret = raioceleste10
shortname = intranet-10
}

# Importante: se seu NAS não estiver cadastrado
# aqui, possivelmente você vai ver no arquivo
# de log:
# Thu Aug 12 17:06:16 2004 : Error: Ignoring request from unknown client 192.168.10.24:41747
#
# sempre que adicionar um novo cliente, você terá que reiniciar o freeradius
# fim clients.conf

Autenticando na base de dados MySQL e evitando conexões simultâneas

Usar freeradius e base de dados MySQL é uma das melhores opções disponíveis. A flexibilidade e suporte do MySQL garante muita segurança aos seus dados e muita rapidez.

Certifique-se de que no arquivo radiusd.conf, a seguinte linha está declarada:

$INCLUDE ${confdir}/sql.conf
Primeiro passo e editar o arquivo /usr/local/etc/raddb/sql.conf e alterar as seguintes linhas:
sql {
driver = “rlm_sql_mysql”
# informa ao freeradius qual modulo de banco
# de dados usar, neste caso, mysql

server = “localhost”
# diz ao freeradius em qual
# host está o servidor mysql

login = “root”
# define o nome de usuário registrado no mysql

password = “senhadologinaqui”
# senha do usuário definido no parâmetro “login”

radius_db = “radius”
# nome do banco de dados que contem
# as tabelas

# abaixo deste texto (arquivo truncado aqui) se encontram definições de SQL para
# pesquisa de dados, não altere, ao menos
# que tenha um propósito
# ……
# ….
}

Segundo, criar o banco de dados e as tabelas. Os criadores do freeradius já deixaram a DDL pronta para você, basta ir até a pasta onde estão os fontes, na subpasta:

src/modules/rlm_sql/drivers/rlm_sql_mysql

Se você descompactou em /usr/local/src, o caminho completo é:

/usr/local/src/freeradius-1.0.1/src
/modules/rlm_sql/drivers/rlm_sql_mysql

Dentro desta pasta existe um arquivo chamado db_mysql.sql contendo todos os comandos para criar as tabelas. Crie o banco de dados com o comando:

# mysqladmin -psenharoot create radius

E crie as tabelas com o comando:

# mysql -psenharoot radius < db_mysql.sql

Agora edite o radiusd.conf, vamos configurá-lo para autenticar os dados no MySQL. Procure no final do arquivo pela sessão “authorize” e adicione “sql”, ficando assim:

authorise {
sql
}
Isso fará com que os usuários sejam procurados na tabela radcheck, banco de dados radius no MySQL.

Próximo passo é registrar a contabilidade dos acessos, muito útil para provedores que tem planos limitados de horas. Vá até a sessão “accounting” e adicione “sql”, ficando assim:

accounting {
sql
}
Isso fará com que os dados das conexões sejam armazenadas na tabela radacct.

Um recurso interessante é o controle de conexão simultânea. Isso impede que um usuário passe suas credencias (login/senha) para amigos e todos usem ao mesmo tempo, dando “preju”. Na sessão “session” adicione “sql”, ficando assim:

session {
sql
}
Ainda não está pronto o controle de sessão, você terá que editar o sql.conf e descomentar as linhas que definem as variáveis:
simul_count_query
simul_verify_query
Vamos criar um usuário chamado “joao”, que terá direito a apenas uma conexão. Conecte-se ao MySQL no banco radius:

# mysql -psenharoot radius

Criar usuário:

mysql> INSERT INTO radcheck (username, attribute, op, value)
mysql> VALUES (‘joao’, ‘Password’, ‘==’, ‘senhasecreta’);

Criar grupo com direito a uma conexão chamado ‘sessaounica’:

mysql> INSERT INTO radgroupcheck (groupname, attribute,
mysql> op, value) VALUES (‘sessaounica’, ‘Simultaneous-Use’,
mysql> ‘:=’, 1);

Inserir joao nesse grupo:

mysql> INSERT INTO usergroup (username, groupname) VALUES (‘joao’, ‘sessaounica’);

Pronto. João agora não pode passar seu login pra ninguém, senão ficará sem acesso! Para conexões ISDN 128k, crie um grupo de dupla permissão, pois senão o segundo canal não conseguirá conectar-se. Veja como aparece no log, uma tentativa de conexão simultânea após o usuário já estar conectado de outro lugar:

Auth: Login OK: [joao/senhasecreta] (from client pr4k port 326 cli 31555xxxx)
Auth: Multiple logins (max 1) : [joao/senhasecreta] (from client pr4k port 315 cli 31552xxxx)

Acontece, de vez em quando, do usuário ficar “agarrado” no radius. Ele é desconectado do RAS ou NAS, porém o radius não da baixa na sessão, os motivos podem ser, principalmente, perda do pacote no caminho até o radius, problema muito comum para provedores que lidam com ADSL de outras operadoras. A próxima vez que o usuário tenta logar, o acesso é negado – o servidor radius pensa que é sessão simultânea. Para resolver esse problema, sempre que um usuário (joao por exemplo) ficar “agarrado”, você libera ele com a SQL:

mysql> DELETE FROM radacct WHERE username = ‘joao’ AND acctsessiontime = 0 ORDER BY radacctid DESC LIMIT 1;

A desvantagem é que João terá que solicitar suporte técnico para ter o problema resolvido!

Checagem e retorno de atributos em banco de dados

NOTA: As SQL’s exibidas neste capítulo foram digitadas no prompt do MySQL de um servidor de testes para você ter uma noção dos conceitos na prática.

Quando você cria o banco de dados MySQL do radius a partir da DDL fornecida nos fontes do módulo, as seguintes tabelas são criadas:

  • radacct – contém informações de contabilidade dos usuários, descrita no capítulo “Extrato de horas”;
  • radcheck – contém a lista de atributos que serão usados para autenticar um usuário específico. O atributo mais necessário para que o usuário tenha acesso seguro é “Password”, exemplo:

    mysql> SELECT UserName, Attribute, op, Value FROM radcheck WHERE UserName = ‘joao’;

    UserName         |    Attribute         |   op   | Value
    -----------------------------------------------------------
    joao             |    Password          |  ==   | senhasecreta
    joao             |    NASIPAddress      |  ==   | 192.168.0.1
    -----------------------------------------------------------

    Quando João tentar se autenticar, será checado os dois parâmetros, Password e NASIPAddress, só será retornado um Access-Accept se a senha estiver certa e a pergunta vier do NAS 192.168.0.1. Muitos parâmetros podem ser adicionados para limitar a fonte de acesso, até mesmo restringir um usuário dial-up a um único número de telefone (parâmetro CallingStationID)!

  • radreply – contém uma lista de atributos devolvidos ao usuário. Estes atributos só serão enviados numa resposta diferente de Access-Reject, parâmetros de resposta influenciam na conexão do usuário, você poderá interagir com o NAS (ou RAS), desde que ele tenha flexibilidade para os valores retornados (adquira o manual do seu RAS, é muito interessante saber o que pode ser feito nele pelas respostas do radius).

    mysql> SELECT UserName, Attribute, op, Value FROM radreply WHERE UserName = ‘joao’;

    UserName  | Attribute         |  op  | Value
    ----------------------------------------------------------
    joao      | Reply-Message     |  ==  | Bem Vindo Sr. Diretor!
    joao      | Framed-IP-Address |  ==  | 10.0.0.121
    joao      | Framed-IP-Netmask |  ==  | 255.255.255.0
    ----------------------------------------------------------

    Com os registros acima, João receberá uma mensagem de boas vindas e o endereço ip 10.0.0.121/24.

  • usergroup – Bom, seria muito desagradável administrar centenas de usuários inserindo atributos em um por um. Você pode criar grupos de checagem e inserir os usuários neles. A tabela usergroup serve exatamente para isso: você adiciona grupos de checagem e retorno nas tabelas radgroupcheck e radgroupreply respectivamente, e, ao criar um relacionamento entre o grupo e a usuário nessa tabela, os parâmetros do grupo são usados nas operações com o usuário.

    mysql> SELECT UserName, GroupName FROM usergroup;

    UserName     |    GroupName
    ----------------------------------
    joao         |    Diretoria
    patrick      |    Admin
    anamaria     |    Dialup
    kairan       |    Dialup
    milene       |    Dialup
    marcos       |    Velox
    ----------------------------------
  • radgroupcheck – contém informações dos grupos referenciados em usergroup para checagem de parâmetros:

    mysql> SELECT GroupName, Attribute, op, Value FROM radgroupcheck ORDER BY GroupName;

    GroupName   | Attribute      |  op  | Value
    ---------------------------------------------------
    Admin       | NAS-IP-Address |  ==  |  192.168.0.1
    Dialup      | NASPortType    |  ==  |  Async
    Diretoria   | NAS-IP-Address |  ==  |  192.168.0.1
    Velox       | NASPortType    |  ==  |  Virtual
    ---------------------------------------------------

    Acima, podemos ver que: Quem é do grupo Admin e Diretoria só pode se autenticar se a conexão for intermediada pelo NAS 192.168.0.1. Quem é do grupo Dialup só pode autenticar se o tipo da porta (NASPortType) for assíncrona. E assim vai!

  • radgroupcheck – contém informações dos grupos referenciados em usergroup para retorno de parâmetros:

    mysql> SELECT GroupName, Attribute, op, Value FROM radgroupreply ORDER BY GroupName;

    GroupName | Attribute      |  op   | Value
    -------------------------------------------------------------------
    Admin     | Reply-Message  |  ==   | Bem vindo Manda-chuva!
    Dialup    | Reply-Message  |  ==   | Um site de cada vez por favor.
    Diretoria | Reply-Message  |  ==   | Acesso bloqueado as 19:00
    Velox     | Reply-Message  |  ==   | É proibido compartilhar conexão 
                                         com terceiros
    --------------------------------------------------------------------
  • radpostauth – salva informações de respostas enviadas para os usuários. Com ele você pode tirar um relatório das tentativas de acesso, por exemplo:

    mysql> SELECT user, pass, reply, date FROM radpostauth WHERE user = ‘joao’;

    user  | pas          | reply          | date
    -------------------------------------------------------
    joao  | senhasecreta | Access-Accept  |  20041228125413
    joao  | senhasecreta | Access-Accept  |  20041229182318
    -------------------------------------------------------

    Acima, o relatório diz que o usuário autenticou com sucesso nas duas tentativas. O campo date é timestamp: ano, mês, dia, hora, minuto e segundo.

Agora que você já sabe como manipular o retorno e a autorização dos usuários, leia o manual do seu NAS e veja quais parâmetros ele aceita e crie seus próprios grupos de acesso. Boa sorte!

Autenticando na base de dados PostgreSQL, Oracle e outros

Talvez você tenha imaginado ao ver o título que integrar com outros bancos de dados senão MySQL seria um mistério, na verdade, o sql.conf tem uma única linha que define o banco de dados a ser usado.

Edite sql.conf e você verá as seguintes linhas:

# Database type
# Current supported are: rlm_sql_mysql, rlm_sql_postgresql,
# rlm_sql_iodbc, rlm_sql_oracle, rlm_sql_unixodbc, rlm_sql_freetds

driver = “rlm_sql_mysql”
Nas linhas acima, o driver usado para conectar ao banco de dados é o mysql, para que esse driver esteja disponível, as bibliotecas de inclusões tem que estar presentes no sistema (exemplo: mysql.h).

Mudando o driver de banco de dados, defina os valores apropriados às variáveis:

  • server
  • login
  • password
  • radius_db

As demais podem permanecer inalteradas. Se você mudar a estrutura de algumas SQL’s do sql.conf para algum propósito particular, recomendo que faça testes manuais no banco de dados para se certificar que estão funcionando. Digo isso porque uma vez alterei algumas e meu servidor radius estava se comportando de forma estranha, no log não aparecia nada, quando passei um pente fino, era uma SQL mal escrita.

Negando temporariamente o acesso de clientes inadimplentes usando SQL

Normalmente e inevitavelmente, se você trabalha em um provedor, algum dia um usuário deixará de pagar e você terá que suspender o acesso dele.

É muito interessante manter os dados do cliente no banco de dados, pois ele pode retornar a ativa um dia. Assim, quando ele ligar dizendo:

– Por favor, quero quitar minha dívida e ter meu acesso restabelecido.

Você não terá o problema de ter que colocar senha em branco ou uma senha fácil e pedí-lo para mudar na página. A maioria dos clientes desconfia que os provedores têm acesso à senha deles.

Minha experiência diz também que a maioria dos usuários que retornam a usar o serviço de um provedor, vão optar por usar o mesmo login e senha que usavam antes de serem suspensos, principalmente o e-mail.

Por isso, manter os dados dele no db vai possibilitar essa vantagem.

Como você já viu, se estiver usando uma base de dados, uma SQL será emitida para extrair dados de login do db, o que vamos fazer é manipular essa SQL e alterar a estrutura do banco para suportá-la.

1 – Altere a estrutura da tabela radacct no seu db radius adicionando uma coluna chamada “enable”, essa coluna poderá suportar dois valores: Y ou N.

O padrão será Y, quanto o usuário for desabilitado, o valor deve mudar para N. Acrescente a nova coluna com o seguinte comando no CLI no MySQL:

mysql> ALTER TABLE radacct ADD enable enum(‘Y’,’N’) NOT NULL DEFAULT ‘Y’;

2 – Altere a SQL para chegar o status do usuário no campo “enable”. No arquivo /usr/local/etc/raddb/sql.conf, procure pela linha:

authorize_check_query = “SELECT id, UserName, Attribute, Value,op FROM ${authreply_table} WHERE Username = ‘%{SQL-User-Name}’ ORDER BY id”

E acrescente a cláusula WHERE a seguinte comparação:

AND enable = ‘Y’

Ficando assim:

authorize_check_query = “SELECT id, UserName, Attribute, Value,op FROM ${authreply_table} WHERE Username = ‘%{SQL-User-Name}’ AND enable = ‘Y’ ORDER BY id”
Com isso, somente usuários habilitados poderão ser selecionados! Se o usuário joao não pagar direitinho, você desativa ele com a SQL:

mysql> UPDATE radcheck SET enable = ‘N’ WHERE username = ‘joao’;

Se ele pagar, você ativa com a SQL:

mysql> UPDATE radcheck SET enable = ‘Y’ WHERE username = ‘joao’;

Autenticando na base de dados de usuários do sistema

Se você não precisa de um servidor para grandes implementações, nem usar um servidor de banco de dados, autenticar usuários no sistema pode ser muito útil, o freeradius pode consultar os arquivos /etc/passwd e /etc/shadow para validar uma requisição. A configuração é muito simples, no arquivo /usr/local/etc/raddb/radiusd.conf, edite as seções “instantiate”, “authorize” e “authenticate” de forma que fiquem assim:
instantiate {
}

authorize {
chap
mschap
files
}

authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
unix
}

As palavras “unix” e “files” são as responsáveis pelo tipo de autenticação baseada nos arquivos de sistema.

Usando desta maneira, o método usado para inserir usuários no radius é o mesmo para adicionar um usuário ao sistema: usando os comandos “useradd” ou a ferramenta de administração usada na sua distribuição Linux. Assim, qualquer usuário que puder se autenticar no sistema também poderá se autenticar no radius, mas caso isso não for seguro, você pode editar no radiusd.conf, as opções do módulo “unix” e apontar para novos arquivos passwd e shadow.

Testando o servidor radius antes de colocá-lo em produção

Você instalou, sabe como funciona, escolheu a melhor forma de autenticar, está rodando, mas como saber se ele está funcionando devidamente?

Eu costumo usa duas ferramentas para me certificar se um servidor radius presta:

1 – radtest

O comando radtest acompanha o pacote do freeradius e é instalado com os demais aplicativos. Embora sirva apenas para testar autenticação e retorno de parâmetros, é uma ferramenta muito útil em um Linux.

Sintaxe:

radtest USUÁRIO SENHA SERVIDOR:PORTAAUTH PORTANAS SEGREDORADIUS

onde:

  • USUÁRIO, SENHA – o óbvio, login do usuário e senha;
  • SERVIDOR – endereço ip ou FQDN do servidor radius;
  • PORTAAUTH – porta no SERVIDOR onde o serviço radius atende solicitações de autenticação;
  • PORTANAS – porta do NAS, pode ser uma porta eletrônica (número do modem) ou virtual, apenas para controle. Para testes, coloque qualquer valor numérico.
  • SEGREDORADIUS – quando você faz uma solicitação de autenticação, seu endereço ip tem que estar cadastrado no arquivo clients.conf do servidor num par de IP/SEGREDO. O ip será descoberto pelo SERVIDOR através do parâmetro NAS-IP-Address, o segredo você tem que informar aqui.

Após uma solicitação, o radtest informa quais parâmetros está enviando para o servidor, seguido do retorno.

Exemplo:

# radtest joao senhasecreta 127.0.0.1:1645 0 reioceleste
Sending Access-Request of id 176 to 127.0.0.1:1645
User-Name = “joao”
User-Password = “senhasecreta”
NAS-IP-Address = localhost
NAS-Port = 0

rad_recv: Access-Accept packet from host 127.0.0.1:1645, id=176, length=58
Reply-Message = “Bem vindo chefe!”

Como você pode ver acima, o servidor retornou uma resposta de acesso aceito “Access-Accept” e um parâmetro que eu configurei em radreply para o usuário joao (“Reply-Message”).

2 – NTRadPing

Ferramenta muito boa, para Windows (triste!), mas serve para testar todos os tipos de pacotes radius: Autenticação, Autorização, Contabilidade e Status. Como ele tem uma interface gráfica, não preciso ficar ensinando, a tela é bem obvia, dê uma olhada abaixo, o mesmo teste feito no radtest com o NTRadPing:

Você pode baixá-lo gratuitamente do site:

ou direto:
http://www.mastersoft-group.com/download/step2.asp?frm_prod=9

Criando gráficos de monitoramento com MRTG

Bom, para essa implementação você precisa ter o MRTG instalado no seu Linux, não tem segredo, vá na ordem:

  • instale zlib
  • instale libjpeg
  • instale gd
  • instale mrtg

Por padrão, os programas do mrtg são instalados em /usr/local/mrtg-2/bin.

Criar gráficos com dados do banco de dados do radius é muito importante. Você pode ter o controle de quantas sessões são abertas em horários diferentes, ter o controle do número de registros no banco de dados, etc.

Por exemplo: Implementando um simples gráfico de mrtg para monitorar o número de conexões abertas, pude saber que tenho muitas linhas telefônicas sobrando, podendo bolar uma estratégia para compensar os gastos. É importante também monitorar a quantidade de banda que é consumida pelos clientes dial-up, entre outros valores que podem decidir a expansão do negócio.

Considerando que você vai armazenar os gráficos na pasta /www/graficos que está publicada no seu Apache.

Gráfico de sessões abertas:

Crie o arquivo /www/graficos/sessoes.conf com o conteúdo:

# início
EnableIPv6: no
Workdir: /www/graficos/
Options[_]: growright,bits

Title[sessoes] : Radius – Sessões abertas
MaxBytes[index] : 10000
AbsMax[index] : 20000
Options[index]: growright,noinfo,gauge
Target[index]: `/etc/mrtg/radius-sessoes.sh`
PageTop[index]: Radius
ShortLegend[index]: Sessões
YLegend[index]: Sessões/hora
Legend1[index]: Total de sessões
WithPeak[index]: ymwd
XSize[index]: 350
YSize[index]: 150
# fim

Como você pode ver, o comando /etc/mrtg/radius-sessoes.sh é invocado. Esse script tem que retornar um valor para o MRTG no seguinte formato:

#————–
número<quebra de linha>
número<quebra de linha>
#————–

Exemplo:

# ./etc/mrtg/radius-sessoes.sh
30
0

Nesse caso, o número 30 é o número de sessões que estão abertas. No script /etc/mrtg/radius-sessoes.sh, coloque o seguinte conteúdo:

# inicio
#!/bin/sh

servidormysql=localhost
usuario=root
senha=mysql2005
banco=radius
tabelaacct=radacct

sessoes=`mysql -N -p$senha -h $servidormysql -u $login $banco -e “SELECT count(*) FROM $tabelaacct WHERE AcctStopTime = 0;”`

echo $sessoes
echo 0
# fim

Salve e torne executável:

# chmod +x /etc/mrtg/radius-sessoes.sh

O comando para gerar o gráfico será:

# /usr/local/bin/mrtg-2/bin/mrtg /www/graficos/sessoes.conf

As 3 primeiras vezes que você o executar, erros serão gerados, mas não se preocupe, certifique-se de que novos arquivos foram gerados em /www/graficos/, o arquivo sessoes.html nessa pasta mostra os gráficos que começaram a ser exibidos uns 15 minutos depois.

Coloque o comando para gerar os gráficos de 5 em 5 minutos pelo crontab:

*/5  *  *  *  *  /usr/local/bin/mrtg-2/bin/mrtg /www/graficos/sessoes.conf
Agora é só monitorar!
Extrato de horas

Agora um assunto que é muito interessante: Extrato de horas.

Em muitas empresas, provedores, etc é importante relatar o uso do serviço (conexão a internet) de forma legível e acessível. Os provedores de acesso, por exemplo, tem planos de acesso limitados a certa quantia de horas e quando o usuário abusa, uma multa é cobrada sobre o excedente.

Quando uma quantia é cobrada do usuário, como cliente, ele tem o direito de saber pelo que está pagando, então é hora de dar contas.

O freeradius, junto com os módulos de SQL, salva os dados de sessão na tabela radacct(contabilidade), cada registro nesta tabela é composto pelas seguintes colunas:

  • RadAcctId -> número único de identificação do registro;
  • AcctSessionId -> caracteres de identificação da sessão;
  • AcctUniqueId -> número único da sessão;
  • UserName -> nome de usuário;
  • Realm -> Realm usado;
  • NASIPAddress -> RAS (ou NAS) que participou da autenticação e contabilidade;
  • NASPortId -> porta do NAS usada;
  • NASPortType -> tipo da porta (Async{56kbps}, ISDN {64 ou 128kb}, Virtual {adsl e outros});
  • AcctStartTime -> data hora do início da sessão, hora em que a conexão foi estabelecida;
  • AcctStopTime -> data hora do fim da sessão, hora em que a conexão foi encerrada;
  • AcctSessionTime -> tempo da sessão em segundos (diferença entre AcctStopTime e AcctStartTime);
  • AcctAuthentic -> Protocolo de autenticação usado (ex.: RADIUS);
  • ConnectInfo_start -> informações da conexão quando ela se iniciou, informando o protocolo eletrônico, a velocidade de upload, velocidade de download, etc… (ex.: V90 31200 52000 LAPM/V42Bis);
  • ConnectInfo_stop -> informações da conexão quando ela terminou. Vide ConnectInfo_start
  • AcctInputOctets -> quantidade de dados recebidos;
  • AcctOutputOctets -> quantidade de dados enviados;
  • Os dois campos acima são, sem dúvida, a melhor maneira de controlar o volume de dados de um cliente;
  • CalledStationId -> Em caso de RAS (cyclades, cisco, etc…) com diversos números, informa o número que o cliente discou;
  • CallingStationId -> Número do telefone do cliente. Eu amo esse campo! Com ele, você acha o cliente em qualquer lugar! Tem como você saber de onde o cliente anda conectando, se ele ficar usando em casa e no trabalho, etc;
  • AcctTerminateCause -> Informa o motivo da desconexão. Os valores mais comuns são:
    • Host-Request = o usuário (ou algum software no PC dele) requisitou a desconexão.
    • Lost-Carrier = sinal de linha perdido ou muita interferência na transmissão. Ocorre muito quando há varias extensões na mesma linha telefônica ou a presença de umidade, gato, etc.

      Veja mais detalhes sobre motivos de desconexão em /usr/local/share/freeradius/dictionary.

    • ServiceType = tipo de serviço.
    • FramedProtocol = protocolo usado (ex.: PPP).
    • FramedIPAddress = endereço ip concedido ao cliente durante a sessão. Se a polícia federal der uma batida aí, você vai poder informar pelo endereço ip, de qual telefone partiu a conexão do hacker!
    • AcctStartDelay = tempo demorado para registrar o início da sessão.
    • AcctStopDelay = tempo demorado para registrar o fim da sessão.

Quanto o usuário se conecta ao dispositivo de rede (NAS) e inicia uma sessão, um registro em radacct é criado, mas nem todas as informações estão disponíveis nele. O campo AcctStopTime é 0 (valor zero), entre outros.

Assim, você pode descobrir quais usuários estão conectados no momento com a SQL:

mysql> SELECT username, date_format(AcctStartTime, ‘%d/%m/%Y %T’) AS AcctStartTime, NASPortType FROM radacct WHERE AcctStopTime = 0 ORDER BY AcctStartTime;

Exemplo do resultado:

UserName   | AcctStartTime        |   NASPortType
+--------------------+---------------------------
 paulinho  | 30/12/2004  07:30:06 |   Virtual
 francisco | 30/12/2004  09:28:18 |   Async
+--------------------+---------------------------

Na tabela, vejo que um usuário de velox (paulinho) e outro de conexão discada (francisco) estão conectados.

Assim que a desconexão é registrada pelo NAS ou RAS, é transmitido para porta de contabilidade do freeradius um pedido de encerramento da sessão, os dados restantes são preenchidos (data e hora, tempo total da sessão, velocidade na hora da desconexão, motivo, etc).

Bom, agora que você já sabe o caminho das pedras, é hora de desenvolver um software que te dê isso de forma acessível e que você possa integrar com outros sistemas, como o de cobrança, por exemplo. Boa sorte no desenvolvimento!

Administração de usuários

Não é agradável ter uma grande quantidade de clientes e ter que administrar “no dedo”, um software de administração é fundamental. Você tem três opções:

1 – desenvolver um, escolhendo a tecnologia, se baseando nas suas necessidades e nos relacionamentos do seu banco de dados de clientes, cobrança, etc.

Não existe nenhum segredo para se fazer isso, basta ter conhecimento em alguma linguagem de programação com API do banco de dados usado (exemplo: PHP e MySQL). Assim você pode oferecer para seus clientes, formulários de mudança de senha, extrato de horas de acesso, help-desk, etc. Eu mesmo já desenvolvi um software do tipo, que instalo para meus clientes.

2 – usar o software “dial-up admin”, GNU, distribuído junto com o freeradius.

O dial-up admin é um software completo para administração de um servidor radius baseado em banco de dados. Ele possui total controle das tabelas do radius, para alterar atributos, administrar usuários, grupos e uma interface básica de administração de clientes (nome, telefone, endereço).

Será necessário ter instalado no seu servidor:

  • Apache
  • PHP
  • Perl – módulo Date::Manip

Na pasta de fontes do freeradius, existe uma pasta chamada dialup_admin, coloque-a em /usr/local e se assegure de que somente o usuário que executa o Apache (nobody normalmente) tenha permissões nessa pasta.

Você não irá publicar a pasta /usr/local/dialup_admin no seu Apache, mas sim uma subpasta chamada htdocs (/usr/local/dialup_admin/htdocs), que deverá ser protegida por senha. Insira no seu httpd.conf:

Alias /dialup_admin “/usr/local/dialup_admin/htdocs”
<Directory “/usr/local/dialup_admin/htdocs”
AuthName “Area Restrita – Administração”
AuthType Basic
AuthUserFile /usr/local/dialup_admin/.htpasswd
require valid-user
</Directory>
Crie agora o arquivo de senhas:

# htpasswd -c /usr/local/dialup_admin/.htpasswd -m administrador senha

Vá até a pasta /usr/local/dialup_admin/sql, você deve executar todas estes arquivos de SQL no seu banco de dados de radius (banco “radius”):

# cd /usr/local/dialup_admin/sql
# mysql -pSENHA -u USUARIO -h SERVIDOR radius -e badusers.sql
# mysql -pSENHA -u USUARIO -h SERVIDOR radius < mtotacct.sql
# mysql -pSENHA -u USUARIO -h SERVIDOR radius < totacct.sql
# mysql -pSENHA -u USUARIO -h SERVIDOR radius < userinfo.sql

Onde: SENHA, USUÁRIO e SERVIDOR devem ser substituídos pelos valores corretos no seu servidor MySQL.

Com as tabelas criadas e o Apache configurado, edite o arquivo /usr/local/dialup_admin/conf/admin.conf e altere os valores das variáveis de acordo com sua instalação (mysql, arquivos de configuração do freeradius, etc).

Agora reinicie seu Apache, você irá acessar pelo endereço:

http://192.168.10.1/dialup_admin

Onde 192.168.10.1 deve ser substituído pelo ip ou nome FQDN do servidor.

Com esses passos você deve conseguir usar o software com sucesso!

Ajuda

Espero que tenham gostado da qualidade do artigo.

A versão atualizada e corrigida dia-a-dia estará disponível no endereço:

Como o própria licença do freeradius diz, não dou quaisquer garantia quanto ao software freeradius nem nenhum dos software citados nesse artigo, use por sua própria conta e risco.

Primeiramente, se tiver dúvidas, coloque-as nesse artigo, no vivaolinux.com.br, por favor, não me mande e-mails sem antes ler bem o artigo e se certificar de que você fez um mínimo de esforço para fazê-lo funcional!

Sybase Tutorial.

 Banco de Dados, Linux  Comentários desativados em Sybase Tutorial.
jan 122012
 

Introdução

Resolvi escrever esse tutorial em decorrência da falta de conteúdo em português sobre esse excelente banco de dados relacional. Embora a ênfase seja o uso do banco em sistemas Linux, prucurarei cobrir a instalação em sistemas Windows.

A versão do Sybase atualmente utilizada é a Sybase Adaptive Enterprise 15.0 Express Edition. Essa versão é gratuita para desenvolvedor com a limitação de 5 Gb de disco, 2 Gb de RAM e um único processador. Ela pode ser instalada em máquina com uma configuração superior, mas o SGBD só irá reconhecer até esse limite.

Para configurar a máquina, primeiro é necessário baixar a última versão do banco, disponível em Sybase. Após baixar o arquivo, descompacte-o em uma pasta previamente criada e execute o aplicativo setup na linha de comando. Se não tiver o modo gráfico do Linux instalado, é preciso executa com o prefixo –console para fazer funcionar o instalador. A instalação é simples, bastando seguir as instruções.

Criação do banco

Antes de criar o banco de dados no Linux, é preciso que tenha instalado dois pacotes. Nas distribuições Mandriva, Debian e Ubuntu, esses pacotes não são instalados por default e o Sybase não pede explicitamente, por isso é interessante ressaltá-los.

  • libaio1 – biblioteca para IO assíncrona
  • libstdc++5 – biblioteca padrão c++. Geralmente as distribuições instalam a vesão mais nova, mas esse pacote pode ser instalado normalmente que o sistema não conflita com outras versões.

Antes de criar o banco, é preciso alterar algumas configurações do sistema operacional Linux.

1 – Memória compartilhada do kernel

O limite padrão de memória compartilhada (tanto SHMMAX quanto SHMALL) é de 32 MB nos núcleos 2.2, mas pode ser modificado no arquivo de sistema proc (sem reinicializar o Linux). Por exemplo, para permitir 128 MB:
$ echo 134217728 >/proc/sys/kernel/shmall
$ echo 134217728 >/proc/sys/kernel/shmmax

Estes comandos podem ser colocados em um script executado durante a inicialização.

Como alternativa, pode ser utilizado sysctl, se estiver disponível, para controlar estes parâmetros. Deve-se procurar pelo arquivo chamado /etc/sysctl.conf e adicionar linhas como as mostradas abaixo ao arquivo:
kernel.shmall = 134217728
kernel.shmmax = 134217728

Este arquivo geralmente é processado durante a inicialização, mas sysctl também pode ser chamada explicitamente posteriormente.

2 – Habilitar o teclado no aplicativo asecfg

Com as versões em português, o aplicativo gráfico que cria o database tem um bug que o teclado não funciona. Para corrigir, é preciso criar um link simbólico na pasta /usr/X11R6/lib/X11
ln -s /usr/share/X11/XKeysymDB XKeysymDB

Instalação do servidor Sybase

  • Crie uma pasta “instsybase” na máquina
  • Copie o arquivo ase1502_xe_linux.tgz pra dentro dela
  • De dentro da pasta, descompacte o arquivo utilizando a linha de comando: tar -xzvf ase1502_xe_linux.tgz
  • Remova arquivo compactado: rm ase1502_xe_linux.tgz
  • Execute o arquivo setup: ./setup
  • Deve aparecer uma tela semelhante à imagem abaixo:

    Clicando em Next ele irá perguntar o banco desejado. O tipo de banco pode ser:
  1. Adaptive Server Enterprise for evaluation: não possui limites de tamanho, usuário ou memória. Tem validade de 30 dias após a instalação e só deve ser utilizado para testes.
  2. Adaptive Server Enterprise (Developer Edition): é a versão para desenvolvedores. Não possui limitação de tamanho ou memória, mas só permite no máximo 25 conexões simultâneas. Sua licença não permite o uso comercial.
  3. Adaptive Server Enterprise (Express Edition): é a versão gratuita para uso comercial. Não tem limitação de usuários, mas permite somente 5 Gb de espaço em disco e 2 Gb de memória RAM.

Independente de qual tipo de banco escolhido, as próximas configurações são as mesmas.As próximas instruções são intuitivas e não devem representar problemas. É recomendável que a instalação seja feita em uma partição separada da partição do sistema operacional por medidas de segurança. Um diretório comum para esse tipo de instalação é o /opt

No final da instalação, ele irá perguntar se você deseja configurar emails de alerta. Selecione No. Se desejar, você poderá configurar depois de instalado o sistema.

A próxima etapa é criar o novo servidor de banco de dados. Selecione apenas o primeiro item, conforme a figura abaixo:

Como selecionamos apenas o servidor de banco, a próxima etapa ficará assim:

A tela mais importante é a última, onde irá perguntar as opções do banco. Você pode criar o servidor agora ou pular essa etapa e criar o banco depois com o aplicativo asecfg


  • Adaptive Server Name: nome do servidor de banco de dados. Esse nome será usado nas conexões ao banco. Não pode conter caracteres especiais e nem começar com números.
  • Port Number: porta de comunicação que o banco usará para conexão com outras aplicações
  • Error Log: arquivo onde serão gravados as mensagens de erro de inicio, fim e conexões com o banco. Não confundir com o arquivo de log do banco, onde são registrados todas as transações.
  • Page Size: tamanho da página de código utilizada para gravação e leitura de dados. Se as tabelas possuirem poucas colunas e o volume de dados for pequeno, dê preferência para tamanho penqueno (ex: 2k). Se o banco possuir tabelas grandes e com muitas colunas, onde a necessidade de leituras for intensa, escolha um número de página maior. O menor volume de dados que um banco pode carregar em uma operação de leitura é o tamanho de página. Se um registro buscado for maior que a página, o banco precisará de dois acessos a disco para efetuar a leitura, o que degrada em muito a performance.
  • Master device: arquivo que conterá as tabelas de sistema e estrutura do banco.
  • Master device size: tamanho inicial para o master device. Esse tamanho pode ser alterado a qualquer momento no banco de dados.
  • Master database size: tamanho alocado para as informações da estrutura específica do banco de dados e não do servidor.
  • System procedure device: arquivo que conterá as procedures internas do sistema
  • System procedure device size: similar ao master device size, só que para o System procedure device
  • System procedure database size: similar ao master database size, só que para o System procedure device
  • System device: arquivo que conterá as informações sobre os dispositivos. Em um banco de dados de grande porte pode ter vários devices configurados de diversas maneiras
  • System device size: similar ao master device size, só que para o System device
  • System database size: similar ao master database size, só que para o System device

Squid autenticando em Windows 2003 com msnt_auth

 Clusterweb, Linux, Proxy  Comentários desativados em Squid autenticando em Windows 2003 com msnt_auth
jan 122012
 
Configurando o msnt_auth

Primeiramente iremos configurar o msnt_auth, que é responsável pela autenticação dos usuários no Windows 2003.

No diretório do Squid (/etc/squid/) temos o arquivo msntauth.conf, onde devemos inserir os nomes dos servidores 2003 e o nome do domínio.

Suponhamos que meus servidores estejam configurados da seguinte maneira:

  • PDC = srv01 > 192.168.0.1
  • BDC = srv02 > 192.168.0.2
  • domínio = meudominio

Deixe o conteúdo do msnauth.conf da forma como esta no exemplo abaixo, apenas alterando as informações dos servidores.

OBS: Caso você tenha apenas 1 controlador de domínio, informe o mesmo nome no BDC.

#################################################### # Sample MSNT authenticator configuration file # Antonino Iannella, Stellar-X Pty Ltd # Sun Sep 2 15:52:31 CST 2001 # NT hosts to use. Best to put their IP addresses in /etc/hosts.
server my_PDC           my_BDC          my_NTdomain
server srv01 srv02 meudominio

# Denied and allowed users. Comment these if not needed. #denyusers /usr/local/squid/etc/msntauth.denyusers #allowusers /usr/local/squid/etc/msntauth.allowusers ###################################################
Após configurado o arquivo, coloque em /etc/hosts o nome e o ip dos servidores da seguinte forma:
# Do not remove the following line, or various programs # that require network functionality will fail.
127.0.0.1       firewall localhost.localdomain localhost
192.168.0.1     srv01
192.168.0.2     srv02
Configuração do Squid

Agora devemos editar o arquivo squid.conf. Devemos inserir as seguintes linhas:
auth_param basic program /usr/lib/squid/msnt_auth
auth_param basic children 5
auth_param basic realm Proxy Cache Teste
A última linha pode ser alterada de acordo com sua preferência, pois é a mensagem que o mesmo mostrará na tela onde deverá ser informado usuário e senha.

Após criaremos 2 arquivos no diretório do Squid, “usuarios”, onde colocaremos os usuários que terão o acesso e no “usuarios-total” os usuários que não passaram por nenhuma restrição do proxy.

Criando as acl’s de acesso no squid.conf:

#usuarios-total
acl user-total proxy_auth “/etc/squid/usuarios-total”

#usuarios
acl users proxy_auth “/etc/squid/usuarios”

Não devemos esquecer de criar a ACL de autenticação:
acl autenticar proxy_auth REQUIRED
Após isso é só criar as acl’s de bloqueio normalmente e liberar a autenticação dos usuários como exemplo abaixo:
http_access allow autenticar user-total
bloqueia o que for preciso
http_access allow autenticar user
http_access deny all
Exemplo de squid.conf

Estou disponibilizando aqui meu squid.conf com alguns bloqueios por site, palavras, extensões e msn.
http_port 3128
visible_hostname squid
acl QUERY urlpath_regex cgi-bin \?

cache_dir ufs /var/spool/squid 2048 16 256
cache_mem 32 MB

auth_param basic program /usr/lib/squid/msnt_auth
auth_param basic children 5
auth_param basic realm Proxy Cache Teste
#auth_param basic credentialsttl 10 hours

#ACL PADRAO

acl all src 0.0.0.0/0.0.0.0
acl autenticar proxy_auth REQUIRED
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
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 CONNECT method CONNECT

#ACLS RISOTO

#ACL liberados

acl liberados url_regex “/etc/squid/control/liberados”

#ACL acesso TI

acl ti-usuarios proxy_auth “/etc/squid/control/ti/usuarios”

#ACL acesso DIRETORIA

acl diretoria src “/etc/squid/control/diretoria/usuarios”

#ACL acesso Usuarios

acl usuarios proxy_auth “/etc/squid/control/usuarios/usuarios”
acl usuarios-msn proxy_auth “/etc/squid/control/usuarios/usuarios-msn”
acl proibidos_usuarios url_regex “/etc/squid/control/usuarios/proibidos”
acl palavras_usuarios url_regex -i “/etc/squid/control/usuarios/palavras”
acl arquivos_usuarios urlpath_regex -i “/etc/squid/control/usuarios/arquivos”

#ACL acesso Gerencia

acl gerencia proxy_auth “/etc/squid/control/gerencia/usuarios”
acl proibidos_gerencia url_regex “/etc/squid/control/gerencia/proibidos”
acl palavras_gerencia url_regex -i “/etc/squid/control/gerencia/palavras”
acl arquivos_gerencia urlpath_regex -i “/etc/squid/control/gerencia/arquivos”

no_cache deny QUERY

#sem msn
acl bqmsn dstdomain passport.com
acl msnmessenger url_regex -i gateway.dll
acl msn req_mime_type -i ^application/x-msn-messenger$

#LIBERA/BLOQUEIA ACESSO A NET

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSl_ports
http_access allow localhost

http_access allow liberados
http_access allow diretoria
http_access allow autenticar ti-usuarios
http_access deny proibidos_gerencia
http_access deny palavras_gerencia
http_access deny arquivos_gerencia
http_access allow autenticar gerencia

http_access deny proibidos_usuarios
http_access deny palavras_usuarios
http_access deny arquivos_usuarios

http_access allow autenticar usuarios-msn

http_access deny bqmsn
http_access deny msnmessenger
http_access deny msn

http_access allow autenticar usuarios
http_access deny all

Balanceamento de 3 links com redundância no Linux

 Firewall, Linux  Comentários desativados em Balanceamento de 3 links com redundância no Linux
jan 122012
 
Introdução

Seguindo a sequência dos artigos sobre balanceamento e redundância, segue o script atualizado e modificado para uso de três links de internet.

Referência:

Últimas modificações:

  1. Balanceamento de 3 links + Redundância para os 3 links;
  2. Data e Hora dos eventos;
  3. Modificação nas regras para marcar e desmarcar rotas.

Funcionamento:

1. Se cair um link, ele continua fazendo o balanceamento entre 2 links.

2. Caso caiam 2 links, a rede continua funcionando em 1 link.

3. *Soma dos links, é feita da seguinte maneira: 1ª conexão estabilizada pelo link 1, 2ª conexão estabilizada pelo link 2, 3ª conexão estabilizada pelo link 3; estamos usando peso 1:1:1.

4. Os serviços podem ser divididos e remanejados para determinados links usando regras de marcação.

5. Este método de balanceamento e redundância só serve como saída para a Internet.

* Use um programa do tipo download manager que possa dividir o arquivo em partes para testar.

Modificando as tabelas e rotas

Modificando as tabelas e rotas, mudanças em negrito.

1. Acrescente no arquivo rt_tables:

1 gvt
2 brt
3 net

2. Acrescente a nova rota para os três links, abaixo incluo a regra no arquivo rc.local:

ip route flush table gvt #Limpa as rotas no cache da tabela gvt

ip route flush table brt #Limpa as rotas no cache da tabela brt

ip route flush table net #Limpa as rotas no cache da tabela net

ip route add 192.168.1.0/24 dev eth1 src 192.168.1.10 table gvt
ip route add default via 192.168.1.1 table gvt

ip route add 192.168.2.0/24 dev eth2 src 192.168.2.10 table brt
ip route add default via 192.168.2.1 table brt

ip route add 192.168.3.0/24 dev eth3 src 192.168.3.10 table net
ip route add default via 192.168.3.1 table net

ip rule add from 192.168.1.10 table gvt
ip rule add from 192.168.2.10 table brt
ip rule add from 192.168.3.10 table net

#Esta regra abaixo é responsável pelo balanceamento, vamos dividir a saída com peso 2:1:1, vamos supor que a gvt é 2x
mais rápida com link de 3 mega, link da brt com 1 mega, e link da net com 1 mega.

ip route add default scope global nexthop via 192.168.1.1 dev eth1 weight 2 nexthop via 192.168.2.1 dev eth2 weight 1
nexthop via 192.168.3.1 dev eth3 weight 1

ip route flush cache #Limpa as rotas no cache

Dicas

1. Caso queira trabalhar somente com dois links balanceados e três links redundantes, é necessário remover a regra de balanceamento “nexthop via 192.168.3.1 dev eth3 weight 1” dos arquivos “rc.local” e “gwping.sh”, nesse caso os três links ficarão fora do balanceamento.

2. Posso utilizar os três links que ficaram de fora do balanceamento usando a marcação de pacotes, neste caso os três links trabalharão especificamente para um serviço ou um destino, veja exemplo:

#A regra abaixo determina que toda rede interna balanceada irá acessar o Bradesco pelo 3 link:
iptables -I PREROUTING -t mangle -i eth0 -s 192.168.0.0/24 -d bradesco.com.br -j MARK –set-mark 0x30

#A regra abaixo determina que toda rede interna balanceada irá acessar as portas 110(pop) e 25(smtp) pelo 3 link:
iptables -I PREROUTING -t mangle -i eth0 -s 192.168.0.0/24 -d 0/0 -p tcp -m multiport –dports 110,25 -j MARK –set-mark 0x30

3. Cuidado ao trabalhar com regras de marcação, como trabalhamos com redundância se algum link cair e não deletar a marcação feita para ele, o serviço ficará indisponível até o link voltar… para corrigir esse problema adicionei ao arquivo “gwping.sh” a regra para deletar a marcação do link que caiu… é necessário limpar a tabela mangle e adicionar as novas regras de marcação para quando o link voltar.

#Deleta marcação da tabela de roteamento:
ip rule del fwmark 0x30 lookup net prio 3

#Deleta as regras da tabela mangle:
iptables -F -t mangle
iptables -X -t mangle

Obs.: Não esqueça de desativar o balanceamento dos três links se for utilizá-los com marcação de pacotes, caso contrário não funcionará.

4. Na explicação anterior, para a chamada do script no arquivo rc.local, o comando nohup cria um arquivo “nohup.out” e isso gera um grande acúmulo de dados ocupando espaço desnecessário no HD, se esse log não for necessário para você, é possível desativá-lo acrescentando a opção > /dev/null o que jogará todo esse lixo para o buraco negro. Veja como ficaria a linha de comando:

# nohup > /dev/null /etc/link/gwping &

Script gwping.sh

#!/bin/bash -x

IPTABLES=/sbin/iptables

# Convencionalmente ” 0 ” indica sucesso neste script.

# Tempo entre verificações em segundos
SLEEPTIME=5

# Endereço IP ou nome de domínio para o ping. O roteiro baseia-se no domínio a ser pingável e sempre disponível.
TESTIP=200.98.249.120

# Ping Timeout em segundos.
TIMEOUT=3

# Interfaces externas.
EXTIF1=eth1
EXTIF2=eth2
EXTIF3=eth3

# Endereço IP de interfaces externas. Este não é o endereço do gateway.
IP1=192.168.1.10
IP2=192.168.2.10
IP3=192.168.3.10

# Gateway endereços IP. Este é o primeiro (hop) gateway, poderia ser o seu router IP endereço, se tiver sido configurado como o gateway.
GW1=192.168.1.1
GW2=192.168.2.1
GW3=192.168.3.1

# Pesos relativos de rotas. Guarde este para um baixo valor inteiro. Estou usando 1 para GVT porque é 3 vezes mais rápida.
W1=1
W2=1
W3=1

# Nome dos Provedores; utilizar os seus próprios nomes aqui.
NAME1=gvt
NAME2=brt
NAME3=net

# N º de repetições de sucesso ou fracasso antes de mudar status de conexão.
SUCCESSREPEATCOUNT=1
FAILUREREPEATCOUNT=4

## Não mudar nada abaixo desta linha.

# Última link status indica que a macro estado da ligação é determinada.
#Trata-se inicialmente em vigor estabelece encaminhamento mudança adiantado. Não alterar estes valores.
LLS1=1
LLS2=1
LLS3=1

# Última ping estado. Não alterar estes valores.
LPS1=1
LPS2=1
LPS3=1

# Ping atual estatuto. Não alterar estes valores.
CPS1=1
CPS2=1
CPS3=1

# Mudança link status indica que a ligação tem de ser mudado. Não alterar estes valores.
CLS1=1
CLS2=1
CLS3=1

# Conde de repetidos até estatuto ou para baixo estatuto. Não alterar estes valores.
COUNT1=0
COUNT2=0
COUNT3=0

while : ; do
ping -W $TIMEOUT -I $IP1 -c 1 $TESTIP > /dev/null  2>&1
RETVAL=$?

if [ $RETVAL -ne 0 ]; then
echo $NAME1 Down
CPS1=1
else
CPS1=0
fi

if [ $LPS1 -ne $CPS1 ]; then
echo `date +%x” “%X` Ping status changed for $NAME1 from $LPS1 to $CPS1
COUNT1=1
else
if [ $LPS1 -ne $LLS1 ]; then
COUNT1=`expr $COUNT1 + 1`
fi
fi

if [[ $COUNT1 -ge $SUCCESSREPEATCOUNT || ($LLS1 -eq 0 && $COUNT1 -ge $FAILUREREPEATCOUNT) ]]; then
echo `date +%x” “%X` Uptime status will be changed for $NAME1 from $LLS1
CLS1=0
COUNT1=0
if [ $LLS1 -eq 1 ]; then
LLS1=0
else
LLS1=1
fi
else
CLS1=1
fi

LPS1=$CPS1

ping -W $TIMEOUT -I $IP2 -c 1 $TESTIP > /dev/null  2>&1
RETVAL=$?

if [ $RETVAL -ne 0 ]; then
echo `date +%x” “%X` $NAME2 Down
CPS2=1
else
CPS2=0
fi

if [ $LPS2 -ne $CPS2 ]; then
echo `date +%x” “%X` Ping status changed for $NAME2 from $LPS2 to $CPS2
COUNT2=1
else
if [ $LPS2 -ne $LLS2 ]; then
COUNT2=`expr $COUNT2 + 1`
fi
fi

if [[ $COUNT2 -ge $SUCCESSREPEATCOUNT || ($LLS2 -eq 0 && $COUNT2 -ge $FAILUREREPEATCOUNT) ]]; then
echo `date +%x” “%X` Uptime status will be changed for $NAME2 from $LLS2
CLS2=0
COUNT2=0
if [ $LLS2 -eq 1 ]; then
LLS2=0
else
LLS2=1
fi
else
CLS2=1
fi

LPS2=$CPS2

ping -W $TIMEOUT -I $IP3 -c 1 $TESTIP > /dev/null  2>&1
RETVAL=$?

if [ $RETVAL -ne 0 ]; then
echo `date +%x” “%X` $NAME3 Down
CPS3=1
else
CPS3=0
fi

if [ $LPS3 -ne $CPS3 ]; then
echo `date +%x” “%X` Ping status changed for $NAME3 from $LPS3 to $CPS3
COUNT3=1
else
if [ $LPS3 -ne $LLS3 ]; then
COUNT3=`expr $COUNT3 + 1`
fi
fi

if [[ $COUNT3 -ge $SUCCESSREPEATCOUNT || ($LLS3 -eq 0 && $COUNT3 -ge $FAILUREREPEATCOUNT) ]]; then
echo `date +%x” “%X` Uptime status will be changed for $NAME3 from $LLS3
CLS3=0
COUNT3=0
if [ $LLS3 -eq 1 ]; then
LLS3=0
else
LLS3=1
fi
else
CLS3=1
fi

LPS3=$CPS3

if [[ $CLS1 -eq 0 || $CLS2 -eq 0 || $CLS3 -eq 0 ]]; then

if [[ $LLS1 -eq 1 && $LLS2 -eq 0 && $LLS3 -eq 0 ]]; then
echo `date +%x” “%X` Switching to $NAME2 #Se o link 1 cair
echo “Limpando todas as regras da tabela mangle …..”
iptables -F -t mangle
iptables -X -t mangle
echo “Regras limpas …..”
ip rule del fwmark 0x10 lookup gvt prio 3
ip rule add from 192.168.3.10 table net
ip rule add from 192.168.2.10 table brt
ip rule add fwmark 0x30 lookup net prio 3
ip rule add fwmark 0x20 lookup brt prio 3
ip route replace default scope global nexthop via $GW2 dev $EXTIF2 weight $W2 nexthop via $GW3 dev $EXTIF3 weight $W3
ip route flush cache
#Para usar a marcação de pacotes descomente as linhas abaixo, e comente a linha acima logo após o
#último comando nexthop para desativar o balanceamento do 3 link ex.: #nexthop via $GW3 dev $EXTIF3 weight $W3
#$IPTABLES -I PREROUTING -t mangle -i eth0 -s 192.168.0.6 -j MARK –set-mark 0x30
#$IPTABLES -I PREROUTING -t mangle -i eth0 -s 192.168.0.0/24 -d 0/0 -p tcp -m multiport –dports 110,25 -j MARK –set-mark 0x20
cat /etc/link/resolv.conf > /etc/resolv.conf

elif [[ $LLS2 -eq 1 && $LLS1 -eq 0 && $LLS3 -eq 0 ]]; then
echo `date +%x” “%X` Switching to $NAME1 #Se o link 2 cair
echo “Limpando todas as regras da tabela mangle …..”
iptables -F -t mangle
iptables -X -t mangle
echo “Regras limpas …..”
ip rule del fwmark 0x20 lookup brt prio 3
ip rule add from 192.168.1.10 table gvt
ip rule add from 192.168.3.10 table net
ip rule add fwmark 0x10 lookup gvt prio 3
ip rule add fwmark 0x30 lookup net prio 3
ip route replace default scope global nexthop via $GW1 dev $EXTIF1 weight $W1 nexthop via $GW3 dev $EXTIF3 weight $W3
ip route flush cache
#Para usar a marcação de pacotes descomente as linhas abaixo, comente a linha acima logo após o
#último comando nexthop para desativar o balanceamento do 3 link ex.: #nexthop via $GW3 dev $EXTIF3 weight $W3
#$IPTABLES -I PREROUTING -t mangle -i eth0 -s 192.168.0.6 -j MARK –set-mark 0x30
#$IPTABLES -I PREROUTING -t mangle -i eth0 -s 192.168.0.0/24 -d 0/0 -p tcp –dport 443 -j MARK –set-mark 0x10
cat /etc/link/resolv.conf > /etc/resolv.conf

elif [[ $LLS1 -eq 0 && $LLS2 -eq 0 && $LLS3 -eq 1 ]]; then
echo `date +%x” “%X` Switching to $NAME1 #Se o link 3 cair
echo “Limpando todas as regras da tabela mangle …..”
iptables -F -t mangle
iptables -X -t mangle
echo “Regras limpas …..”
ip rule del fwmark 0x30 lookup net prio 3
ip rule add from 192.168.1.10 table gvt
ip rule add from 192.168.2.10 table brt
ip rule add fwmark 0x10 lookup gvt prio 3
ip rule add fwmark 0x20 lookup brt prio 3
ip route replace default scope global nexthop via $GW1 dev $EXTIF1 weight $W1 nexthop via $GW2 dev $EXTIF2 weight $W2
ip route flush cache
#Para usar a marcação de pacotes descomente as linhas abaixo.
#$IPTABLES -I PREROUTING -t mangle -i eth0 -s 192.168.0.0/24 -d 0/0 -p tcp -m multiport –dports 110,25 -j MARK –set-mark 0x20
#$IPTABLES -I PREROUTING -t mangle -i eth0 -s 192.168.0.0/24 -d 0/0 -p tcp –dport 443 -j MARK –set-mark 0x10
cat /etc/link/resolv.conf > /etc/resolv.conf

elif [[ $LLS2 -eq 0 && $LLS3 -eq 1 && $LLS1 -eq 1 ]]; then
echo `date +%x” “%X` Switching to $NAME2#Se o link 1 e 3 cair
echo “Limpando todas as regras da tabela mangle …..”
iptables -F -t mangle
iptables -X -t mangle
echo “Regras limpas …..”
ip route replace default scope global via $GW2 dev $EXTIF2
ip rule del fwmark 0x10 lookup gvt prio 3
ip rule del fwmark 0x30 lookup net prio 3
ip route flush cache
cat /etc/link/resolv.conf > /etc/resolv.conf

elif [[ $LLS3 -eq 0 && $LLS2 -eq 1 && $LLS1 -eq 1 ]]; then
echo `date +%x” “%X` Switching to $NAME3#Se o link 1 e 2 cair
echo “Limpando todas as regras da tabela mangle …..”
iptables -F -t mangle
iptables -X -t mangle
echo “Regras limpas …..”
ip route replace default scope global via $GW3 dev $EXTIF3
ip rule del fwmark 0x20 lookup brt prio 3
ip rule del fwmark 0x10 lookup gvt prio 3
ip route flush cache
cat /etc/link/resolv.conf > /etc/resolv.conf

elif [[ $LLS1 -eq 0 && $LLS2 -eq 1 && $LLS3 -eq 1 ]]; then
echo `date +%x” “%X` Switching to $NAME1#Se o link 2 e 3 cair
echo “Limpando todas as regras da tabela mangle …..”
iptables -F -t mangle
iptables -X -t mangle
echo “Regras limpas …..”
ip route replace default scope global via $GW1 dev $EXTIF1
ip rule del fwmark 0x20 lookup brt prio 3
ip rule del fwmark 0x30 lookup net prio 3
ip route flush cache
cat /etc/link/resolv.conf > /etc/resolv.conf

elif [[ $LLS1 -eq 0 && $LLS2 -eq 0 && $LLS3 -eq 0 ]]; then
echo `date +%x” “%X` Restoring default load balancing
echo “Limpando todas as regras da tabela mangle …..”
iptables -F -t mangle
iptables -X -t mangle
echo “Regras limpas …..”
ip route replace default scope global nexthop via $GW1 dev $EXTIF1 weight $W1 nexthop via $GW2 dev $EXTIF2 weight $W2 nexthop via $GW3 dev $EXTIF3 weight $W3
ip rule add from 192.168.1.10 table gvt
ip rule add from 192.168.2.10 table brt
ip rule add from 192.168.3.10 table net
ip rule add fwmark 0x10 lookup gvt prio 3
ip rule add fwmark 0x20 lookup brt prio 3
ip rule add fwmark 0x30 lookup net prio 3
ip route flush cache
#Para usar a marcação de pacotes descomente as linhas abaixo, comente a linha acima logo após o último comando nexthop
#para desativar o balanceamento do 3 link ex.: #nexthop via $GW3 dev $EXTIF3 weight $W3
#$IPTABLES -I PREROUTING -t mangle -i eth0 -s 192.168.0.6 -j MARK –set-mark 0x30
#$IPTABLES -I PREROUTING -t mangle -i eth0 -s 192.168.0.0/24 -d 0/0 -p tcp -m multiport –dports 110,25 -j MARK –set-mark 0x20
#$IPTABLES -I PREROUTING -t mangle -i eth0 -s 192.168.0.0/24 -d 0/0 -p tcp –dport 443 -j MARK –set-mark 0x10
cat /etc/link/resolv.conf > /etc/resolv.conf
fi
fi
sleep $SLEEPTIME
done