Apostila Servidores - Gerds
Transcrição
Apostila Servidores - Gerds
Universidade Tuiuti do Paraná – UTP Faculdade de Ciências Exatas e de Tecnologia Cursos de Computação Grupo de Estudos de Redes de Computadores e Sistemas Distribuídos Professores: Marcelo Soares Farias Roberto Néia Amaral Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Curitiba, 2008 Roberto Amaral – Marcelo Soares Farias Página 2 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX INTRODUÇÃO Inicialmente, os computadores eram máquinas caríssimas que centralizavam em um único ponto o processamento das aplicações de vários usuários, e muitas vezes de toda uma organização. Com a redução de custos do hardware e introdução dos microcomputadores no cenário da informática, a estrutura centralizada cedeu lugar a uma estrutura totalmente distribuída. Nessa estrutura diversos equipamentos dos mais variados portes processam informações de formas isoladas, o que acarreta uma serie de problemas. Dentre os problemas apresentados, destaca-se a duplicação desnecessária de recursos de hardware (impressoras, discos, etc.) e de software (programas, arquivos de dados etc.). Nesse cenário surgiram as redes de computadores, onde um sistema de comunicação foi introduzido para interligar os equipamentos de processamentos de dados (estações de trabalhos), antes operando isoladamente com o objetivo de permitir o compartilhamento de recursos. Evolução dos Sistemas de Computação Na década de 1950, computadores eram máquinas grandes e complexas, operadas por pessoas altamente especializadas. Usuários enfileiravam-se para submeter suas leitoras de cartões ou fitas magnéticas que eram processados em lote. Não havia nenhuma forma de interação direta entre usuários e máquina. Avanços na década de 1960 possibilitaram o desenvolvimento dos primeiros terminais interativos, permitindo aos usuários acesso ao computador central através de linhas de comunicação. Usuários passavam a ter então um mecanismo que possibilitava a interação direta com o computador, ao mesmo tempo em que avanços nas técnicas de processamento davam origem a sistemas de tempo compartilhado (time-sharing), permitindo que várias tarefas dos diferentes usuários ocupassem simultaneamente o computador central, através de uma espécie de revezamento no tempo de ocupação do processador. Mudanças na caracterização dos sistemas de computação ocorreram durante a década de 1970: de um sistema único centralizado e de grande porte, partia-se em direção à distribuição do poder computacional. O desenvolvimento de minis e microcomputadores de bom desempenho, permitiu a instalação de considerável poder computacional concentração deste poder em uma determinada área. Embora o custo de hardware de processamento estivesse caindo, o preço dos equipamentos eletromecânicos continuava alto, tornando a interconexão entre os vários sistemas para o uso compartilhado de dispositivos periféricos importante. A capacidade de troca de informações também foi uma razão importante para a interconexão. Usuários individuais de sistemas de computação não trabalham isolados e necessitam de alguns dos benefícios oferecidos pôr um sistema centralizado. Ambientes de trabalho cooperativos se tornaram uma realidade tanto nas empresas como nas universidades, exigindo a interconexão dos equipamentos. Para solucionar problemas de desempenho, os pesquisadores criaram novas arquiteturas que propunham a distribuição e o paralelismo como forma de melhorar desempenho, confiabilidade e modularidade dos sistemas computacionais, alem de um sistema centralizado de repositório de informasses, ou melhor, servidores. Roberto Amaral – Marcelo Soares Farias Página 3 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Evolução das Arquiteturas A maioria dos computadores projetados até a década de 1980 teve sua concepção baseada nos modelos original de Von Neumann. A interação perfeita entre o modo como os programas são desenvolvidos e a maneira como são interpretados foi uma das razões para o grande sucesso de tal modelo. A revolução nos sistemas de computadores começou com os avanços de tecnologia de integração de circuitos, que reduziram em muito os custos das partes de tais sistemas, onde várias arquiteturas foram então propostas. Dentre as alternativas apresentadas, podemos citar os Sistemas de UCP única com múltiplas Unidades Funcionais, as Máquinas Pipeline e os Processadores de matriz (Array Processors). A idéia de seqüência múltiplas e independentes de instruções em um sistema composto por vários elementos de processamento compartilhando um espaço comum de memória aparece em uma outra arquitetura (Sistemas de Multiprocessadores) com as seguintes características: • Dois ou mais processadores de capacidade aproximadamente iguais. • Todos os processadores dividem o acesso a uma memória comum. • Todos os processadores compartilham os canais de I/O unidades de controle e dispositivos periféricos. • O sistema total é controlado pôr um único sistema operacional. Por último surgiram os Sistemas de Processamento Distribuídos por Eckhouse 78 como uma ”coleção de elementos de processamentos interconectados tanto logicamente quanto fisicamente para execução cooperativa de programas de aplicação com controle dos recursos descentralizado”, o qual é o objetivo deste curso. Em Sistemas Distribuídos, o estado do sistema é fragmentado em partes que residem em diferentes processadores e memórias, com comunicação entre essas partes sujeita a retardos variáveis e desconhecidos. Em sistemas distribuídos é impossível forçar a simultaneidade de eventos. A mínima interferência em uma execução de tarefas paralelas vai permitir a obtenção de sistemas de grande desempenho. A não existência de qualquer elemento sem o qual o sistema para totalmente lhe confere alta confiabilidade. A possibilidade de utilização em larga escala de um pequeno número de elementos básicos de hardware e software é responsável pelo elevado grau de modularidade do sistema. Embora difícil de caracterizar, a arquitetura de múltiplos processadores tem melhor aplicação em sistemas que exigem grande disponibilidade, grandes requisitos de vazão, tempos de resposta garantidos e baixos, alto grau de modularidade, e também onde as tarefas podem ser executadas de modo concorrente. Um Sistema Distribuído vai ser formado por um conjunto de módulos processadores interligados por um sistema de comunicação. Vemos então que a interconexão de sistemas veio atender a duas necessidades distintas: • Construção de sistemas com maior desempenho e maior confiabilidade • Compartilhamento de recursos. Roberto Amaral – Marcelo Soares Farias Página 4 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Alguns autores consideram como Sistema Distribuído apenas àqueles construídos para atender a primeira necessidade, classificando como Redes de Computadores os sistemas construídos com a finalidade de permitir o compartilhamento de recursos. Outros preferem classificar todos esses sistemas como Sistemas Distribuídos e subclassificá-los em Máquinas de Arquitetura Distribuída e Redes de Computadores. Uma Máquina de Arquitetura Distribuída é composta por um número ilimitado, mas finito de módulos autônomos de processamento interconectados para formar um único sistema, no qual o controle executivo global é implementado através da cooperação de elementos descentralizados. Uma Rede de Computadores também é formada por um número ilimitado, mas finito de módulos autônomos de processamento interconectados, no entanto a independência dos vários módulos de processamento é preservada na sua tarefa de compartilhamento de recursos e troca de informações. MAS ENTÃO O QUE VEM A SER UMA REDE DE COMPUTADORES? É UM MEIO FÍSICO E LÓGICO DE COMUNICAÇÃO DE DADOS, COMPARTILHADO, O QUAL POSSUI OBJETIVO DE UNIR INFORMAÇÕES ENTRE TODOS OS PARCIPANTES DESTE INFODUTO CONTROLADO DE DADOS. “Quando você precisar de ir além do computador em cima de sua mesa, esta na hora de instalar uma rede local”. Roberto Amaral – Marcelo Soares Farias Página 5 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Classificação das Redes de Computadores As redes de computadores podem ser classificadas quanto sua abrangência geográfica. Para cada tipo de rede deve existir um tipo de meio de transmissão assim como um tipo de protocolo que fará essa comunicação. Na junção de todas estas idéias, podemos considerar que cada tipo de rede, possuirá sua característica particular assim como seus possíveis protocolos de comunicação. TIPOS DE REDES Cada tipo de rede tem suas características principais ligadas a sua abrangência, ou seja, a sua capacidade de atendimento em Km. • LAN (Local Area Network) : As redes locais tem uma abrangência limitada por um prédio, uma sala, um campus ou uma fábrica num limite de alguns quilômetros ( 2 a 3 Km). • MAN (Metropolitan Area Network) : As redes metropolitanas podem atender uma grande área como uma região metropolitana, por exemplo atendida por uma anel de fibras óticas interligando diversos municípios como se fosse uma infra-estrutura única, com alcance de 30 Km. • WAN (Wide Area Network) : As redes WAN também conhecidas como redes de longa distância podem ser redes nacionais atendendo todo o território como também redes internacionais interligadas via satélite ou cabos submarinos. Podemos considerar a tabela abaixo Roberto Amaral – Marcelo Soares Farias Página 6 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Topologia “Topologia para redes de computadores está relacionada como os equipamentos que compõe uma rede são distribuídos em um determinado espaço. Porem esta distribuição não está relacionada somente a questões físicas, mas sim sobre questões lógicas também.” A Topologia define a estrutura da rede. Há dois pontos na definição de topologia: a topologia física, que é o layout real do meio físico de transmissão, e a topologia lógica, que define como os meios são acessados. As topologias físicas geralmente usadas são barramento, anel, estrela, estrela estendida, hierárquica e malha. • Barramento: usa um único segmento de transmissão, ao qual todos os hosts se conectam diretamente. • Anel: conecta um host ao próximo e o último host ao primeiro. Isso cria um anel físico do cabo. • Estrela: conecta todos ao ponto central, sendo normalmente um hub ou switch.. • Estrela estendida: une as estrelas individuais vinculando os hubs/switches. • Hierárquica: forma similar a uma estrela estendida, mas em vez de unir os hubs/switches, o sistema é vinculado a um computador que controla o tráfego na topologia. • Malha: Nesta, cada host tem suas próprias conexões com todos os outros hosts. Isso reflete o projeto da Internet, que possui vários caminhos para qualquer lugar. A topologia lógica de uma rede é a forma como os hosts se comunicam através dos meios. Os dois tipos mais comuns de topologias lógicas são broadcast e passagem de token. • Broadcast: simplesmente significa que cada host envia seus dados a todos os outros hosts no meio da rede. As estações não seguem nenhuma ordem para usar a rede, a primeira a solicitar é a atendida. • Passagem de token: controla o acesso à rede, passando um token eletrônico seqüencialmente para cada host. Quando um host recebe o token, significa que esse host pode enviar dados na rede. Se o host não tiver dados a serem enviados, ele vai passar o token para o próximo host. Roberto Amaral – Marcelo Soares Farias Página 7 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Roberto Amaral – Marcelo Soares Farias Página 8 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Dispositivos de Redes Os dispositivos que se conectam diretamente a um segmento de rede são chamados de hosts. Esses hosts incluem computadores, clientes e servidores, impressoras, scanners e muitos outros dispositivos do usuário. Esses dispositivos fornecem aos usuários conexão à rede, com a qual os usuários compartilham, criam e obtêm as informações. Placas de Redes Em termos de aparência, uma placa de rede é uma placa de circuito impresso que se encaixa no slot de expansão de um barramento em uma placa mãe do computador ou em um dispositivo periférico. É também chamada de placa de rede. Em computadores laptop/notebook as placas de rede são normalmente do tamanho de uma placa PCMCIA. As placas de rede são consideradas dispositivos da camada 2 do modelo OSI, porque cada placa de rede em todo o mundo transporta um código exclusivo, chamado de um endereço Media Access Control (MAC). Esse endereço é usado para controlar as comunicações de dados do host na rede. Sempre que existir um dispositivo de rede acoplado ao meio de rede, há algum tipo de dispositivo de placa de rede, mesmo que geralmente não seja exibido. Roberto Amaral – Marcelo Soares Farias Página 9 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX CABEAMENTOS DE REDE Para que computadores funcionem em conjunto em uma rede, são necessários meios de transmissão ou cabos. Os meios de transmissão são utilizados em redes de computadores para ligar as estações entre si, sendo que estes meios diferem com relação à banda passante, potencial para conexão ponto a ponto ou multiponto, limitação geográfica, imunidade a ruído, custo, disponibilidade de componentes e confiabilidade. Qualquer meio físico capaz de transportar informações eletromagnéticas é passível de ser usado em redes de computadores. Os mais comuns utilizados são: o par trançado, o cabo coaxial e a fibra ótica. Sob circunstâncias especiais, radiodifusão, infravermelho, enlaces de satélite e microondas também são escolhas possíveis. As taxas de transmissão desses meios são medidas em bits por segundo, ou bps. Cabo coaxial É composto de um centro condutivo, envolto por uma camada isolante, e novamente envolto por uma camada condutora. É bastante resistente a interferências. Este possui uma imunidade a ruído ótima, e uma fuga eletromagnética mais baixa. Os ruídos geralmente presentes em áreas urbanas e industriais são de baixa freqüência, tornando as transmissões em banda básica mais susceptíveis a eles. Quanto ao custo, o coaxial é mais caro do que o par trançado, assim como é mais elevado o custo das interfaces para ligação ao cabo. Para ligar esse tipo de cabo na placa de rede de um computador, é necessário um conector BNC e um T. Vantagens de sua utilização • Baixos custos de manutenção; • Topologia simples de implementar; • Resistência à ruídos e interferências; Desvantagens de sua utilização • Distâncias limitadas; • Baixo nível de segurança; • Difícil de fazer grandes mudanças na topologia da rede. Roberto Amaral – Marcelo Soares Farias Página 10 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Cabo par trançado Este é composto por dois pares de fios (ou 4 pares ) envoltos por uma camada isolante de forma a reduzir o ruído e manter constante as prioridades elétricas do meio através de todo o seu comprimento. A perda de energia é um parâmetro importante quando se discute não só a taxa máxima de transmissão, mas também a distância máxima permitida, qualquer que seja o meio de transmissão. A perda de energia aumenta com a distância, até chegar um ponto onde o receptor não consegue mais reconhecer o sinal. A energia pode ser perdida por radiação ou por calor. Sua desvantagem é a sensibilidade às interferência e ruído. Com o aumento das taxas de transmissão, cabos de par trançado de melhor qualidade foram gradativamente sendo produzidos. Uma aplicação típica para o par trançado é a ligação ponto a ponto entre terminais e computadores e entre estações da rede e o meio de transmissão. Esse é o mais utilizado atualmente e, o custo total da rede é maior pelo fato de necessitar de equipamentos extras (como hub, por exemplo). O conector utilizado é o RJ-45. Conectorização Pino 1 Branco do Verde Pino 2 Verde Pino 3 Branco do Laranja Pino 4 Azul Pino 5 Branco do Azul Pino 6 Laranja Pino 7 Branco do Marrom Pino 8 Marrom PINO SINAL 1 Transmissão - 2 Transmissão + 3 Recepção - 4 5 6 Recepção + 7 8 Roberto Amaral – Marcelo Soares Farias Página 11 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Fibra óptica A transmissão em fibra ótica é realizada pelo envio de um sinal de luz. O cabo ótico consiste em um filamento de sílica ou plástico, por onde é feita a transmissão da luz. Ao redor do filamento existem substâncias de menor índice de refração, que fazem com que os raios sejam refletidos internamente, minimizando assim as perdas de transmissão. Existem três tipos de fibras óticas: as multímodo degrau, as multímodo com índice gradual e as monomodo. Fibras ópticas não estão sujeitas a interferência e transmitem a uma taxa bastante elevada: 100.000 Mbps, podendo chegar a 200.000 Mbps. Características A fibra óptica é praticamente imune às influências do meio ambiente por onde está passando. Imunidade total a interferência eletromagnética e interferência por radio-frequência. Não gera campos magnéticos e eletromagnéticos. Insensível a relâmpagos e descargas atmosféricas. Segura mesmo em contacto com condutores de alta voltagem, pois é totalmente dielétrica. Muito segura contra grampeamento (roubo de informações). Suporta grandes distâncias entre repetidores. Sua aplicação se dá em telecomunicações, é usada para Redes de Telecomunicações e Transmissão de sinais de processamento de dados. Redes de Telecomunicações: - Circuitos de telefonia interurbanos. - Conexões de redes locais (LANs e WANs). - Redes para controle de distribuição de energia elétrica - Redes de transmissão de dados. - Redes de distribuição de sinais de radiodifusão e televisão - Redes de estúdios, cabos de câmeras de televisão. - Redes industriais, em monitoração e controle de processos. - Transmissão de sinais de processamento de dados de computador para computador. - Interligação de circuitos dentro de equipamentos. - Aplicações de controle em geral ( fábricas, maquinários) - Em veículos motorizados, aeronaves, trens e navios Vantagens de sua utilização Desvantagens de sua utilização Roberto Amaral – Marcelo Soares Farias Página 12 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Equipamentos de Redes Existem diversos fabricantes de equipamentos de redes de computadores, porem basicamente os equipamentos estão classificados em 3 tipos: 1. Os que simplesmente repassam as informações (sinais elétricos) 2. Os que tratam a informação através dos endereços físicos dos equipamentos 3. Os que realizam a operação de encaminhar a informação através de redes lógicas No grupo 1, que são replicadores de sinais elétricos, trabalhando no nível físico, estão os Hubs e Repetidores No grupo 2, os equipamentos que realizam a comutação no primeiro nível lógico de uma rede, são os Switch. No grupo 3 , os equipamentos que realizam o roteamento entre redes diferentes, os Roteadores. HUB A finalidade de um hub é gerar os sinais da rede novamente e os retemporizar. Isso é feito no nível de bit para um grande número de hosts usando um processo conhecido como concentração. Essa definição é muito similar a dos repetidores, por essa razão um hub é também conhecido como repetidor multiportas. A diferença é o número de cabos que se conectam ao dispositivo. Os motivos para se usar os hubs é criar um ponto de conexão central para os meios de cabeamento e aumentar a confiabilidade da rede. Aumenta-se a confiabilidade da rede permitindo qualquer cabo único a falhar sem afetar toda a rede. Isso difere da topologia de barramento onde, se houver uma falha no cabo, toda a rede será afetada. Os hubs são considerados dispositivos da camada 1 porque apenas geram novamente o sinal e o transmite para suas portas. Existem diferentes classificações dos hubs na rede. A primeira classificação é dizer se os hubs são ativos ou passivos. Hubs ativos obtêm energia de uma fonte de alimentação para gerar novamente os sinais da rede. Alguns são denominados dispositivos passivos porque simplesmente repartem o sinal entre vários usuários, como usando um fio "Y". Os hubs passivos não geram novamente os bits. Outra classificação é se os hubs são inteligentes ou burros. Os hubs inteligentes têm portas do console, o que significa que podem ser programados para gerenciar o tráfego da rede. Os hubs burros simplesmente aceitam um sinal da rede de entrada e o repete em todas as portas sem realizar qualquer gerenciamento. Roberto Amaral – Marcelo Soares Farias Página 13 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX SWITCH Um switch é um dispositivo da camada 2. A diferença entre o hub e o switch é que os switches tomam as decisões com base nos endereços MAC e os hubs não tomam nenhuma decisão. Devido às decisões que os switches tomam, eles tornam uma LAN muito mais eficiente. Fazem isso "comutando" os dados apenas pela porta à qual o host apropriado está conectado. Os switches, à primeira vista, se parecem com os hubs. Os hubs e os switches têm muitas portas de conexão, uma vez que parte de suas funções é a concentração da conectividade. A diferença entre um hub e um switch é o que acontece dentro do dispositivo. A finalidade de um switch é concentrar a conectividade, ao mesmo tempo tornando a transmissão de dados mais eficiente. Ele comuta os pacotes das portas de entrada para as portas de saída, enquanto fornece a cada porta a largura de banda completa. Roteadores O roteador encontra-se na camada de rede OSI, conhecida como camada 3. Toma decisões com base em grupos de endereços de rede ao invés de endereços MAC individuais. Os roteadores podem também conectar diferentes tecnologias da camada 2, como Ethernet, Token-ring e FDDI. No entanto, devido à sua habilidade de rotear pacotes baseados nas informações da camada 3, os roteadores se tornaram o backbone da Internet, executando o protocolo IP. A finalidade de um roteador é examinar os pacotes de entrada (dados da camada 3), escolher o melhor caminho para eles através da rede e depois comutar os pacotes para a porta de saída apropriada. São dispositivos de controle de tráfego mais importantes nas grandes redes. Permitem que qualquer tipo de computador se comunique com qualquer outro computador em qualquer parte do mundo. Roberto Amaral – Marcelo Soares Farias Página 14 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Sistema de Endereçamento Devemos considerar que existem dois tipos de endereçamento dentro de uma rede, ou melhor, uma máquina pode assumir 2 tipos de endereços. Os endereços físicos, que são atribuídos pelos fabricantes de placas de redes e os endereços lógicos (IP) atribuídos pelo administrador de redes. Protocolo IP O protocolo IP foi projetado tendo como principal objetivo a ligação inter-redes. Por isto ele é considerado como elemento integrador da Internet, através dele é possível a conexão de diversas sub-redes. A Internet é composta de diversos backbones construídos através linhas de altas velocidades de diversos tipos de tecnologia. A cada um destes backbones estão conectadas várias redes locais de muitas outras instituições cada uma com suas características de sub-rede. Em muitas empresas é comum utilizar o IP, e outros protocolos de sua família, para interligar computadores de tecnologia diferentes. Endereçamento IP Identificadores Universais Diz-se que um sistema provê um serviço de comunicação universal quando é possível a quaisquer dos elementos deste sistema se comunicar arbitrariamente. Para tornar um sistema de comunicação universal, devemos estabelecer um método globalmente aceito para identificação dos componentes a ele conectados. Nas redes TCP/IP, a entidade que atua como identificador universal é o endereço IP, um número de 32 dígitos binários. A idéia básica de seus mentores era a de tornar o roteamento simples e eficiente. As três Classes Primárias de Endereço A Internet é uma gigantesca rede de computadores como qualquer outra rede física. A grande diferença, entretanto, está no fato de que a Internet é uma estrutura virtual, concebida por seus desenhistas e implementada inteiramente em software. Assim, os projetistas tiveram liberdade de arbitrar o tamanho e formato dos pacotes, endereços, técnicas de roteamento, etc. Na questão do endereçamento, cada host é atribuído um número inteiro que será seu endereço - no caso o endereço IP Cada endereço IP possui 32 bits, que se divide em duas partes: uma primeira que identifica a rede a qual esse computador está logicamente conectado e uma segunda parte que identifica o computador propriamente dito. Observe que todas as máquinas conectadas a uma mesma rede irão compartilhar essa primeira parte, que se convencionou chamar net id (identificador da rede). Analogamente, à segunda porção do endereço IP é o host id (identificação da máquina). Em termos práticos, cada endereço IP deverá estar contido em uma das cinco categorias. A classe de um endereço pode ser identificada através do exame dos quatro bits de mais alta ordem, sendo que as três classes básicas (A, B e C) podem ser distinguidas apenas pelos dois primeiros. A classe A, usada para um pequeno número de redes que contêm mais de 65.535 hosts, reserva 7 bits para o net id e 24 bits para o host id. Os endereços da classe B se destinam a redes de tamanho intermediário (entre 256 e 65535 máquinas) e reservam 14 bits para o net id e 16 bits para o host id. Finalmente, a classe C, apropriada para pequenas Roberto Amaral – Marcelo Soares Farias Página 15 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX redes, aloca 21 bits para o net id e apenas 8 bits para o host id. Observe que os endereços IP são estruturados de forma a permitir uma rápida extração da identificação da rede (net id) e da máquina a ela conectada (host id). Os gateways dependem da extração eficiente do net id para realizar o roteamento dos pacotes IP. Endereço de uma rede e Endereço de Difusão (Broadcast) Por convenção, um host id 0 nunca é atribuído a uma máquina. Ao invés disso, esse endereço com os bits do host id todos zerados irá se referir à rede propriamente dita. O endereçamento IP permite que se faça referência a todos os hosts de uma determinada rede através do chamado endereço de difusão. Um endereço de broadcast é aquele em que os bits do host id são todos 1. Nem todas as redes suportam a difusão, algumas irão precisar de implementação de software e outras não permitirão esta facilidade. Difusão local O endereço de difusão permite que um sistema remoto mande um pacote para todos os nós de uma determinada rede. Do ponto de vista do endereçamento, a desvantagem deste esquema é que ele requer o conhecimento do endereço de rede. Outra forma de endereço de difusão é chamada endereço de difusão limitada ou endereço de difusão local. Este endereço consiste de 32 bits iguais a 1. Esse mecanismo possibilita a referência a todas as máquinas de uma rede local sem que os endereços IP reais sejam conhecidos. Endereços de referência à própria rede e ao próprio host. Campos de endereço preenchidos somente com 1's indicam "todos". Um endereço com 32 bits 1, indica todas as máquinas desta rede e um endereço com todos os bits do host id iguais a 1 indica todas as máquinas de uma determinada rede (especificada no net id). Analogamente, campos preenchidos com 0's são geralmente interpretados como significando "este". Assim, um endereço com 32 bits 0, indica o próprio host (este host) e um endereço com todos os bits do net id iguais a zero, se refere à rede local (esta rede). Endereço de Multicast Muitas tecnologias de rede contêm mecanismos que permitem o envio simultâneo de pacotes a múltiplos destinatários. Em redes de barramento (como a Ethernet) isso pode ser alcançado com o envio de um único pacote (capturado por todos os hosts). Em outras topologias, com conexões ponto-a-ponto, esse pacote deverá ser replicado para alcançar todos os hosts. Roberto Amaral – Marcelo Soares Farias Página 16 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Algumas redes suportam um segundo tipo de comunicação ponto multi-ponto, conhecido com multicast. Ao contrário do broadcast, a técnica de multicast permite que cada host "escolha" se deseja ou não participar daquele "canal". Quando um grupo de máquinas decide se comunicar, elas selecionam um endereço de multicast que será, então, o seu canal de comunicação. Na Internet, quando um determinado grupo de máquinas deseja criar um grupo de multicast, elas devem todas "sintonizar", isto é, configurar suas interfaces para receber pacotes enviados para um mesmo endereço. Esse endereço deverá pertencer à Classe D. Assim, cada endereço entre 224.0.0.0 e 239.255.255.255 (mais de 268 milhões de alternativas!) pode ser usado como multicast. A idéia é que hosts podem, a qualquer momento, conectar-se ou desconectar-se de um grupo de multicast. A técnica de multicasting traz como vantagem sobre a difusão, uma melhor seletividade. Isto é, os dados somente serão enviados aos hosts necessários. Notação Decimal Números de 32 bits não são facilmente manipuláveis por seres humanos, e mesmo aplicação não tratam diretamente com este tipo de representação. Uma forma mais fácil de representar endereços IP é a de particioná-lo em quatro octetos convertidos para a notação decimal e separados por pontos. Desta forma, o binário 11000000 11000110 00001011 10000001 passa a ser tratado como 192.198.11.129 Pode-se também atribuir nomes alfabéticos a hosts, facilitando ainda mais sua memorização. Esta tradução é apoiada por um protocolo específico que atua sobre uma imensa base de dados distribuída conhecida como Domain Name System (DNS). Por questões de simplificação pode-se representar um endereço IP de 32 bits agrupando-os em grupos de 8 bits e representando estes grupos em valores decimais. Por exemplo o endereço 11001000100010011000001100000010 representado em forma de ponto decimal seria 200.137.131.2. Classe A 1.0.0.0 até 127.255.255.255 Classe B 128.0.0.0 até 191.255.255.255 Classe C 192.0.0.0 até 223.255.255.255 Classe D 224.0.0.0 até 239.255.255.255 Classe E 240.0.0.0 até 247.255.255.255 Classes de Endereços representados sobe forma decimal Roberto Amaral – Marcelo Soares Farias Página 17 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Endereço de Loopback O endereço 127.0.0.0 é reservado à aplicação de loopback. Isto é, qualquer pacote enviado a este endereço não deve trafegar na rede, mas retornar ao próprio remetente (isto equivale a dizer que o pacote retornará da própria interface de rede do host). O endereço de loopback ou localhost se presta a testes e comunicação entre processos que rodam numa mesma máquina. Resumo Especiais Endereçamento de Sub-Rede Uma técnica que permite que se partilhe um mesmo endereço de rede entre diversas redes é o endereçamento de sub-rede. Vamos imaginar uma instituição a qual foi atribuído um endereço classe C mas que possui diversas redes interconectadas em suas instalações. Como partilhar este endereço entre estas diversas redes? A adição de sub-redes implica uma nova subdivisão do endereço IP. O sufixo designador do host (host id) é dividido em duas partes: a primeira designará uma sub-rede, e a segunda um host. O problema básico que surge quando realizamos esta nova divisão é que o esquema convencional de roteamento, que procura extrair a porção que designa a rede, deixa de funcionar. Para suplantar esta dificuldade, introduz-se no sistema de roteamento uma nova entidade: a máscara de sub-rede. A máscara de sub-rede é um número de 32 bits que permite a extração de sua "porção de rede". Isto é, ele possui bits 1 nas posições correspondentes a esta "porção de rede". Para uma rede classe C sem sub-redes a máscara seria: 11111111 11111111 11111111 00000000 que em notação decimal corresponde a: 255.255.255.0 Roberto Amaral – Marcelo Soares Farias Página 18 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Nomenclatura das interfaces no Linux Um sistema Linux pode ter várias interfaces, cada uma com um endereço de Protocolo de Internet (IP) diferente. As interfaces podem ser de diferentes tipos, incluindo: • Loopback: lo • Ethernet: eth0, eth1, . . . • Wi-Fi: wlan0, wlan1, . . . • Token Ring: tr0, tr1, . . . • PPP: ppp0, ppp1, . . . Definindo configurações As ferramentas de configuração de rede de baixo nível tradicionais nos sistemas GNU/Linux são os programas ifconfig e route que vêm no pacote net-tools. Essas ferramentas oficialmente foram superadas pelo ip que vem no pacote iproute. O programa ip funciona no Linux 2.2 e superiores e é mais capaz que as ferramentas antigas. Entretanto, as ferramentas antigas ainda funcionam e são mais familiares a muitos usuários. # ifconfig argumentos ( Usado para exibir e configurar uma interface de rede) # route ( Usado para exibir e configurar a tabela de roteamento) Exemplo: Mudando o endereço IP da interface eth0 de 192.168.0.3 para 192.168.0.111 e tornando eth0 como rota para a rede 10.0.0.0 via 192.168.0.1. Executando ifconfig e route sem argumentos de interface, vamos exibir o estado atual de todas as interfaces de rede e roteamento. # ifconfig eth0 Link encap:Ethernet HWaddr 08:00:46:7A:02:B0 inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:23363 errors:0 dropped:0 overruns:0 frame:0 TX packets:21798 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:13479541 (12.8 MiB) TX bytes:20262643 (19.3 MiB) Interrupt:9 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:230172 errors:0 dropped:0 overruns:0 frame:0 TX packets:230172 errors:0 dropped:0 overruns:0 carrier:0 Roberto Amaral – Marcelo Soares Farias Página 19 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX collisions:0 txqueuelen:0 RX bytes:22685256 (21.6 MiB) TX bytes:22685256 (21.6 MiB) # route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * 255.255.0.0 U 0 0 0 eth0 default 192.168.0.1 255.255.255.255 UG 0 0 0 eth0 Desativando a interface eth0: # ifconfig eth0 inet down Conferindo: # ifconfig # route Ativando a interface com o novo endereço IP e novo roteamento. # ifconfig eth0 inet up 192.168.0.111 netmask 255.255.0.0 broadcast 192.168.255.255 # route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.1 dev eth0 Para vermos o resultado: # ifconfig eth0 Link encap:Ethernet HWaddr 08:00:46:7A:02:B0 inet addr:192.168.0.111 Bcast:192.168.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 ... lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 # route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * 255.255.0.0 U 0 0 0 eth0 10.0.0.0 192.168.0.1 255.0.0.0 UG 0 0 0 eth0 #ip Usado para exibir e configurar uma interface de rede. Uso: ip argumentos Os equivalentes para o ip dos comandos ifconfig e route anteriores são: Roberto Amaral – Marcelo Soares Farias Página 20 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX • ip link show • ip route list • ip link set eth0 down • ip addr del dev eth0 local 192.168.0.3 • ip addr add dev eth0 local 192.168.0.111/16 broadcast 192.168.255.255 • ip link set eth0 up • ip route add dev eth0 to 10.0.0.0/8 src 192.168.0.111 via 192.168.0.1 O programa ip mostra sua sintaxe de comando quando executado com o argumento help. Por exemplo, ip link help mostra: Usage: ip link set DEVICE { up | down | arp { on | off } | dynamic { on | off } | multicast { on | off } | txqueuelen PACKETS | name NEWNAME | address LLADDR | broadcast LLADDR | mtu MTU } ip link show [ DEVICE ] Configurando uma interface Wi-Fi O programa iwconfig, que vem no pacote wireless-tools, é usado para interfaces Wi-Fi, juntamente com o ifconfig ou ip. Configurando uma interface com um endereço IP estático Suponha que você quer configurar uma interface Ethernet que tem um endereço IP fixo 192.168.0.123. Esse endereço começa com 192.168.0 então deve estar em uma LAN. Suponha também que 192.168.0.1 é o endereço do gateway da LAN para a Internet. Edite o arquivo /etc/network/interfaces de forma que inclua uma entrada como essa: iface eth0 inet static address 192.168.0.123 netmask 255.255.255.0 gateway 192.168.0.1 Se você tiver o resolvconf instalado então pode adicionar linhas que especifiquem informação de DNS. Por exemplo: iface eth0 inet static address 192.168.0.123 netmask 255.255.255.0 gateway 192.168.0.1 dns-search meudominio.org dns-nameservers 195.238.2.21 195.238.2.22 Depois que a interface foi levantada, os argumentos das opções dns-search e dns-nameservers se tornam disponíveis para o resolvconf para inclusão no arquivo resolv.conf. O argumento meudominio.org da opção dns-search corresponde ao argumento de uma opção search em resolv.conf(5). Os argumentos 195.238.2.21 Roberto Amaral – Marcelo Soares Farias Página 21 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX e 195.238.2.22 da opção dns-nameservers corresponde aos argumentos das opções nameserver no resolv.conf(5). Outras palavras de opção reconhecidas são dns-domain e dns-sortlist. Configurando uma interface usando DHCP Para configurar uma interface usando DHCP edite o arquivo /etc/network/interfaces de forma que inclua uma entrada como essa: iface eth0 inet dhcp Para que isso funcione você precisa ter instalado um dos clientes DHCP mencionados abaixo. A configuração de baixo nível de interfaces de rede pode ser automatizada por meio do Dynamic Host Configuration Protocol (DHCP) (Protocolo de Configuração Dinâmica de Sistemas). Seu firewall ou sistema roteador ou seu ISP de banda larga podem fornecer endereços IP e outros parâmetros dessa maneira. Para isso funcionar você precisa instalar um dos seguintes pacotes: • dhcp3-client (versão 3, Internet Software Consortium) • dhcpcd (Yoichi Hariguchi e Sergei Viznyuk) • pump (Redhat) O pump é simples e largamente utilizado. O dhcp3-client é complexo mas mais configurável. Configurando uma interface Wi-Fi O pacote wireless-tools inclui um script /etc/network/if-pre-up.d/wireless-tools que torna possível configurar hardware Wi-Fi (802.11a/b/g) antes de levantar a interface. A configuração é feita usando o programa iwconfig. Para cada parâmetro de comando possível do iwconfig você pode incluir uma opção em /etc/network/interfaces nomeada como o parâmetro com um prefixo ”wireless-“. Por exemplo, para definir o ESSID de eth0 para meuessid e a chave de encriptação para 123456789e antes de levantar a eth0 usando DHCP, edite o arquivo /etc/network/interfaces de forma a incluir uma entrada como esta: iface eth0 inet dhcp wireless-essid myessid wireless-key 123456789e Configurando múltiplas interfaces Ethernet para um gateway Suponha que a eth0 esteja conectada à Internet com um endereço IP configurado por DHCP e que a eth1 esteja conectada à LAN com um endereço IP estático 192.168.1.1. Editando o arquivo /etc/network/interfaces de forma a incluir entradas como essas: iface eth0 inet dhcp iface eth1 inet static address 192.168.1.1 netmask 255.255.255.0 Configurando interfaces virtuais Usando interfaces virtuais você pode configurar uma única placa Ethernet para ser uma interface para várias sub-redes IP. Por exemplo, suponha que seu sistema esteja em uma rede LAN 192.168.0.x/24. Você quer Roberto Amaral – Marcelo Soares Farias Página 22 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX conectar o sistema à Internet usando um endereço IP público provido via DHCP usando sua placa Ethernet existente. Edite o /etc/network/interfaces de forma a incluir entradas como essas: iface eth0 inet static address 192.168.0.1 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 iface eth0:0 inet dhcp A interface eth0:0 é uma interface virtual. Quando é levantada, também é levantada a sua superior eth0. Reconfiguração de rede O que vem a seguir será importante para o leitor compreender a diferença entre uma interface física e uma interface lógica. Uma interface física é o que temos chamado de ”a interface“, a coisa que é chamada eth0, ppp1, ou o que você tiver. Uma interface lógica é um conjunto de valores que pode ser atribuído aos parâmetros variáveis de uma interface física. Se você achar isso confuso, substitua a expressão ”configurado como interface lógica X“ pela expressão ”configurado com o perfil de interface X“ conforme você ler. As definições iface no arquivo /etc/network/interfaces são na verdade definições de interfaces lógicas, não de interfaces físicas. Se você nunca quiser reconfigurar suas interfaces então pode ignorar esse fato já que a interface física X por padrão será configurada como interface lógica X. Entretanto, suponha que seu computador seja um laptop que você transporta entre a casa e o trabalho. Quando você conecta o computador à rede corporativa ou à sua LAN doméstica você precisa configurar a eth0 apropriadamente. Primeiro defina duas interfaces lógicas casa e trabalho (ao invés de eth0 como fizemos anteriormente) que descrevem como a interface deve ser configurada para a rede doméstica e a rede do trabalho, respectivamente. iface casa inet static address 192.168.0.123 netmask 255.255.255.0 gateway 192.168.0.1 iface work inet static address 81.201.3.123 netmask 255.255.0.0 gateway 81.201.1.1 Então a interface física eth0 pode ser levantada para a rede doméstica com a configuração apropriada especificando na linha de comando: # ifup eth0=casa Para configurar a eth0 para a rede do trabalho execute os comandos: Roberto Amaral – Marcelo Soares Farias Página 23 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX # ifdown eth0 # ifup eth0=work Note que com o arquivo interfaces escrito como acima não será mais possível levantar a eth0 usando apenas ifup eth0. A razão para isso é que o ifup usa o nome da interface física como o nome padrão da interface lógica e agora em nosso exemplo não há uma interface lógica eth0 definida. Configuração de rede durante a inicialização Na inicialização o script /etc/rcS.d/S40networking executa o comando ifup -a. Isso levanta todas as interfaces físicas listadas em entradas auto no etc/network/interfaces. Atualmente é freqüentemente melhor gerenciar a configuração de rede usando métodos dinâmicos. Uma vez que estão disponíveis mecanismos para suportar hardware que mude dinamicamente se torna mais simples tratar hardware estático como se fosse dinâmico também. Entretanto, na maioria dos casos se deseja que pelo menos a interface de loopback lo seja levantada na inicialização. Assim, certifique-se de que o /etc/network/interfaces inclua as seguintes entradas. auto lo iface lo inet loopback Você pode listar nomes de interfaces físicas adicionais em entradas auto se desejar que também sejam levantadas durante a inicialização. Nunca liste interfaces PCMCIA em entradas auto. O programa cardmgr de PCMCIA é iniciado mais tarde na seqüência de inicialização que quando o /etc/rcS.d/S40networking é executado. Configuração de rede via hotplug Para obter suporte a hot plug instale o pacote hotplug. Hardware de rede pode ser conectado com o computador ligado durante a inicialização ou depois que um cartão (por exemplo, um cartão PCMCIA) é inserido na máquina ou depois que um utilitário como o discover é executado e carrega os módulos de controladores necessários. Quando o kernel detecta um novo hardware ele inicializa o controlador (driver) para o hardware e então executa o programa hotplug para configurá-lo. Mais tarde, se o hardware for removido, então o kernel executa o hotplug novamente com ajustes de variáveis de ambiente diferentes. No Debian, quando o hotplug é chamado ele executa scripts em /etc/hotplug/ e /etc/hotplug.d/. O hardware de rede recentemente inserido é configurado pelo script /etc/hotplug/net.agent. Suponha que seu cartão de rede PCMCIA tenha sido inserido resultando na interface eth0 se tornando disponível para uso. O /etc/hotplug/net.agent faz o seguinte: ifup eth0=hotplug A menos que você tenha adicionado uma definição de interface lógica ou um mapeamento chamado hotplug em /etc/network/interfaces, esse comando não fará nada. Para fazer com que o comando configure a eth0, adicione a seguinte entrada em /etc/network/interfaces: Roberto Amaral – Marcelo Soares Farias Página 24 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX mapping hotplug script echo (Não inclua uma entrada mapping como essa se você estiver usando pedidos do ifplugd iniciados pelo hotplug para controlar a interface, como descrito em ‘Gatilhando a configuração de rede – ifplugd’ on the current page.) Se você quiser que apenas a eth0 e mais nenhuma outra interface seja levantada com hot plug então use grep ao invés de echo como a seguir: mapping hotplug script grep map eth0 Resolução de problemas com rede Se você encontrar problemas então verifique a saída seguinte como primeira verificação do que está acontecendo: # ifconfig # cat /proc/pci # cat /proc/interrupts # dmesg | more Testes de rede básicos Instale os pacotes netkit-ping, traceroute, dnsutils, ipchains (para kernel 2.2), iptables (para kernel 2.4) e nettools e : $ ping yahoo.com # checa a conexão Internet $ traceroute yahoo.com # rastrea pacotes IP $ ifconfig # checa configuração do host $ route -n # checa configuração de roteamento $ dig [@servidor-dns.com] host.domínio [{a|mx|any}] |less # checa os registros DNS de host.domínio usando servidor-dns.com para um registro a {mx|any} $ ipchains -L -n |less # checa o filtro de pacotes (kernel 2.2) $ iptables -L -n |less # checa o filtro de pacotes (kernel 2.4) $ netstat -a # encontra todas as portas abertas $ netstat -l --inet # encontra as portas em escuta $ netstat -ln --tcp # encontra todas as portas TCP em escuta (numérico) Roteamento Roberto Amaral – Marcelo Soares Farias Página 25 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX O primeiro endereço em uma rede IP é o endereço da própria rede. O último endereço é o endereço de broadcast da rede. Todos os outros endereços podem ser alocados a sistemas na rede. Desses, o primeiro ou o último endereço normalmente é alocado para o gateway de Internet para a rede. A tabela de roteamento contém a informação do kernel sobre como enviar pacotes IP aos seus destinos. Aqui está um exemplo de tabela de roteamento para um sistema Debian em uma rede local (LAN) com endereço IP 192.168.50.x/24. O sistema 192.168.50.1 (também na LAN) é um roteador para a rede corporativa 172.20.x.x/16 e o sistema 192.168.50.254 (também na LAN) é um roteador para a Internet para todos. # route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 127.0.0.0 * 255.0.0.0 U 0 0 2 lo 192.168.50.0 * 255.255.255.0 U 0 0 137 eth0 172.20.0.0 192.168.50.1 255.255.0.0 UG 1 0 7 eth0 default 192.168.50.254 0.0.0.0 UG 1 0 36 eth0 A primeira linha depois do cabeçalho diz que o tráfego destinado à rede 127.x.x.x será roteado para lo a interface de loopback. • A segunda linha diz que o tráfego destinado aos sistemas na LAN serão roteados através de eth0. • A terceira linha diz que o tráfego destinado à rede corporativa será roteado para o gateway 192.168.50.1 e também através de eth0. • A quarta linha diz que o tráfego destinado à Internet será roteado para o gateway 192.168.50.254 e também através de eth0. Os endereços IP na tabela também podem aparecer como nomes que são obtidos procurando endereços em /etc/networks ou usando o resolvedor da Biblioteca C. Configuração de rotas Para inserir uma rota use o comando no formato: route add [ -net | -host ] target [ netmask Nm ] [ gw Gw ] [[ dev ] If ]. Exemplos: Inserir uma rota para uma rede: # route add -net 192.168.5.0 netmask 255.255.255.0 gw 192.168.1.3 Inserir uma rota para um host, utilizando uma determinada interface ponto-aponto: # route add -net 192.168.10.1 dev ppp0 Para selecionar a rota default: # route add default gw 192.168.1.200 Roberto Amaral – Marcelo Soares Farias Página 26 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Para remover rotas usamos praticamente a mesma sintaxe, mas ao invés do "add" usamos o "del". Se quisermos adicionar uma rota ao subir uma determinada interface, poderíamos usar a seguinte linha dentro das opções da interface: iface eth0 inet static ... up ip route add 10.0.0.0/24 via 200.X.X.Y Entradas na Tabela de Roteamento. Cada tabela de roteamento pode ter várias entradas. Abaixo temos alguns tipos de rotas que podem ser adicionadas com o comando ip route. • unicast: Uma rota unicast é a mais comum na tabela. Isto é tipicamente um rota para uma rede de destino. Se o tipo de rota não é especificado é assumido como sendo unicast. Ex: # ip route add unicast 192.168.0.0/24 via 192.168.100.5 # ip route add default via 193.7.255.1 # ip route add unicast default via 206.59.29.193 # ip route add 10.40.0.0/16 via 10.72.75.254 • broadcast: Esta rota é usada pela camada de link de dispositivos (placas Ethernet) o qual suportam a notação de endereço broadcast. Este tipo de rota é usado somente na tabela local e é tipicamente manuseado pelo kernel. Ex: # ip route add table local broadcast 10.10.20.255 dev eth0 proto kernel scope link src 10.10.20.67 # ip route add table local broadcast 192.168.43.31 dev eth4 proto kernel scope link src 192.168.43.14 • local: O kernel irá adicionar entradas para a tabela de roteamento local quando endereços IP são adicionados para uma interface. Isto significa que os IP's estão no próprio host. # ip route add table local local 10.10.20.64 dev eth0 proto kernel scope host src 10.10.20.67 # ip route add table local local 192.168.43.12 dev eth4 proto kernel scope host src 192.168.43.14 • nat: Esta rota é adicionada para o kernel na tabela de roteamento local, quando o usuário tenta configurar stateless NAT. (Re-escreve o destino do pacote) Ex: # ip route add nat 193.7.255.184 via 172.16.82.184 # ip route add nat 10.40.0.0/16 via 172.40.0.0 • unreachable: Quando um requisição para uma decisão de roteamento retorna um destino com rota do tipo unreachable, um ICMP unreachable é gerado e retornado para o endereço de origem. Ex: # ip route add unreachable 172.16.82.184 # ip route add unreachable 192.168.14.0/26 # ip route add unreachable 209.10.26.51 Roberto Amaral – Marcelo Soares Farias Página 27 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX • prohibit: Análogo ao unreachable mas gera um ICMP prohibit. Ex: # ip route add prohibit 10.21.82.157 # ip route add prohibit 172.28.113.0/28 # ip route add prohibit 209.10.26.51 • blackhole: Um pacote que casa com uma rota do tipo blackhole é descartado. Ex: # ip route add blackhole default # ip route add blackhole 202.143.170.0/24 # ip route add blackhole 64.65.64.0/18 • throw: Este tipo de rota é conveniente, quando deseja-se que uma consulta na tabela de roteamento falhe, fazendo com que o pacote continue sendo analizado no RPDB. Ex: # ip route add throw 10.79.0.0/16 # ip route add throw 172.16.0.0/12 Configuração do Netfilter O projeto netfilter/iptables é um subsistema de firewalling para o kernel Linux 2.4 e superiores. Com o uso desta ferramenta definimos regras especiais para entrada, saída e passagem de pacotes entre interfaces, podendo atuar antes ou após as ações referentes ao roteamento. O iptables atua sobre as tabelas presentes no Kernel, que indicam situações de roteamento, de acordo com a situação em que se encontra o pacote, a qual é referida por uma corrente de regras, ou chain. Básico do netfilter As tabelas do iptables são: • filter: é a tabela padrão, sobre a qual podemos nos referir a três correntes de regras, ou chains: • INPUT, pacotes que entram na interface; • OUTPUT, pacotes que saem da interface • FORWARD, pacotes que estão sendo roteados de uma interface para outra; • nat: esta tabela se refere ao uso do recurso de Network Address Translation ou NAT, na qual podemos nos referir aos chains: PREROUTING, pacotes que serão alterados antes de roteamento; OUTPUT, pacotes locais que serão alterados antes do roteamento e POSTROUTING, pacotes que serão alterados após a aplicação das regras de roteamento; • mangle: usada para alterações especiais no pacote, PREROUTING, para alteração antes do roteamento e OUTPUT, pacotes locais que serão alterados antes do roteamento. Dentre as ações que são feitas sobre os pacotes que atendem a um determinado chain em uma dada tabela, temos: • ACCEPT: aceita o pacote; • DROP: rejeita o pacote; Roberto Amaral – Marcelo Soares Farias Página 28 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX • MASQUERADE: atua somente sobre a tabela nat e indica que será efetuado a conversão de endereços ou NAT, conforme indicado no comando. Podemos definir regras padrão para um determinado chain e regras mais específicas, usando: iptables [–t TABELA] –P CHAIN AÇÃO onde TABELA é a tabela sobre a qual estamos atuando – caso não especificarmos, será assumida a tabela filter; CHAIN é a corrente de regras à qual o pacote está associado; e AÇÃO é a ação a ser executada. Para adicionarmos uma regra usando iptables, procedemos da seguinte forma: iptables [–t TABELA] –A CHAIN {OPÇÕES} –j AÇÃO sendo OPÇÕES é um conjunto diverso de opções que podemos especificar, como interface de origem ou de destino e TABELA, CHAIN e AÇÃO definidos como anteriormente. De modo análogo, iptables [–t TABELA] –D CHAIN {OPÇÕES} –j AÇÃO permite removermos uma regra. Para limparmos todas as regras existentes de um chain usamos: iptables [–t TABELA] –F CHAIN. Alvo Netfilter Regras de firewall possuem diversos alvos: • quatro alvos básicos : o ACCEPT significa deixar o pacote passar. o DROP significa descartar o pacote. o QUEUE significa passar o pacote para o userspace (caso suportado pelo kernel). o RETURN significa parar de atravessar esta chain e continuar na próxima regra na chain anterior (a chain que chamou esta). • alvos extendidos : o LOG liga o logging do kernel. o REJECT envia como resposta um pacote de erro e descarta o pacote. o SNAT altera o endereço de origem de pacote e é usado somente na chain POSTROUTING. (somente tabela nat) --to-source endereçoip[-endereçoip][:porta-porta] Roberto Amaral – Marcelo Soares Farias Página 29 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX – MASQUERADE é o mesmo que SNAT mas para conexões com endereços IP atribuídos dinamicamente (discadas). (somente tabela nat) --to-ports porta[-porta] – DNAT altera o endereço de destino do pacote e é usado nas chains PREROUTING e OUTPUT e em chains definidas pelo usuário que são chamadas somente a partir destas chains. (somente tabela nat) --to-destination endereçoip[-endereçoip][:porta-porta] – REDIRECT altera o endereço IP de destino para enviar o pacote para a própria máquina. --to-ports porta[-porta] Comandos do Netfilter Os comandos básicos do iptables são : iptables -N chain # cria uma chain iptables -A chain \ # adiciona regra na chain -t tabela \ # usa tabela (filter, nat, mangle) -p protocolo \ # tcp, udp, icmp ou all, -s endereço-origem[/máscara] \ --sport porta[:porta] \ # porta de origem caso -p seja tcp ou udp -d endereço-origem[/máscara] \ --dport porta[:porta] \ # porta de destino caso -p seja tcp ou udp -j alvo \ # o que fazer se o pacote casar -i nome-interface-entrada \# para INPUT, FORWARD, PREROUTING -o nome-interface-saída # para FORWARD, OUTPUT, POSTROUTING Fazendo NAT Dicas: Qualquer regra aplicada a SNAT usa somente a chain POSTROUTING. Antes de iniciar o uso da tabela NAT temos que habilitar o roteamento no kernel, usando: # echo “1” > /proc/sys/net/ipv4/ip_forward Para que não percamos o roteamento é necessário editar o arquivo /etc/sysctl.conf e inserirmos ou modificarmos a linha do modo que fique assim: net.ipv4.ip_forward= 1 Exemplos de SNAT: iptables –t nat –A POSTROUTING –s 10.0.3.1 –o eth0 –j SNAT --to 192.111.22.33 iptables –t nat –A POSTROUTING –s 10.0.3.0/8 –o eth0 –j SNAT --to 192.111.22.33 iptables –t nat –A POSTROUTING –s 10.0.3.1 –o eth0 –j SNAT --to 192.111.22.33-192.11.22.66 Roberto Amaral – Marcelo Soares Farias Página 30 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Exemplos de DNAT: iptables –t nat –A PREROUTING –s 10.0.3.1 –i eth0 –j DNAT --to 192.111.22.33 iptables –t nat –A PREROUTING –s 10.0.3.1 –i eth0 –j DNAT --to 192.111.22.33-192.11.22.66 iptables –t nat –A PREROUTING –i eth0 –j DNAT --to 192.111.22.33:22 Teste seus conhecimentos: iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth1 -j MASQUERADE Compartilhando Conexão com IPTABLE modprobe iptable_nat echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o INTERFACE -j MASQUERADE Substitua o "INTERFACE" pela placa conectada na Internet. Este comando simplesmente compartilha a conexão proveniente da placa da Internet com todas as demais placas de rede espetadas no servidor, por isso não é necessário especificar a placa de rede local. • O primeiro comando ativa o "iptable_nat", o módulo do Iptables responsável por oferecer suporte ao roteamento de pacotes via NAT. • O segundo comando ativa o "ip_forward", o módulo responsável pelo encaminhamento de pacotes, utilizado pelo módulo iptable_nat. • O terceiro comando cria uma regra de roteamento, que orienta o servidor a direcionar para a Internet todos os pacotes (recebidos dos clientes) que se destinarem a endereços que não façam parte da rede local (ou seja, qualquer coisa fora da faixa 192.168.0.x). A partir daí, o servidor passa a ser o gateway da rede. Nem todas as distribuições instalam o executável do Iptables por padrão. Em muitas distribuições com o Kernel 2.6, é necessário usar um quarto comando ao compartilhar uma conexão, por exemplo ADSL. Este comando ajusta os tamanhos dos pacotes recebidos do modem ao MTU usado na rede local. iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS --clampmss-to-pmtu Caso a conexão seja via via ADSL com autenticação (PPPoE), e precise usar o pppoeconf ou o adslsetup para estabelecer a conexão, lembre-se de substituir "eth0" no comando por "ppp0". DHCP De um modo geral o trabalho de um servidor DHCP é bastante simples. Ele responde aos pacotes de broadcast das estações, enviando um pacote com um dos endereços IP disponíveis e os demais dados da Roberto Amaral – Marcelo Soares Farias Página 31 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX rede. Periodicamente o servidor DHCP verifica se as estações ainda estão lá, exigindo uma renovação do "aluguel" do endereço IP (opção lease time). Assim os endereços IP são gastos apenas com quem realmente estiver online, evitando que os endereços disponíveis se esgotem. No Linux o serviço de DHCP é exercido pelo dhcp3-server que nas distribuições baseadas no Debian pode ser instalado através do comando: # apt-get install dhcp3-server Os comandos "/etc/init.d/dhcp3-server start" e "/etc/init.d/dhcp3-server stop" comandam a atividade do serviço. O arquivo de configuração é o dhcpd.conf. No Debian o caminho completo para ele é: /etc/dhcp3/dhcpd.conf A configuração do arquivo é igual independentemente da distribuição. Um arquivo de configuração básico, contém o seguinte: ddns-update-style none; default-lease-time 600; max-lease-time 7200; authoritative; subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.100 192.168.0.201; option routers 192.168.0.10; option domain-name-servers 200.177.250.10,200.204.0.10; option broadcast-address 192.168.0.255; } A opção " default-lease-time" controla o tempo de renovação dos endereços IP. O "600" indica que o servidor verifica a cada dez minutos se as estações ainda estão ativas. Se você tiver mais endereços IP do que máquinas os endereços IP das estações raramente vai precisar mudar. Mas, no caso de uma rede congestionada, o " max-lease-time" determina o tempo máximo que uma estação pode usar um determinado endereço IP. Isso foi planejado para ambientes onde haja escassez de endereços IP. A opção "range" determina a faixa de endereços IP que será usada pelo servidor. Se você utiliza a faixa de endereços 192.168.0.1 até 192.168.0.254 por exemplo, pode reservar os endereços de 192.168.0.1 a 192.168.0.100 para estações configuradas com IP fixo e usar os demais para o DHCP. Na "option routers" vai o endereço do default gateway da rede, ou seja, o endereço do servidor que está compartilhando a conexão. Não é necessário que o mesmo micro que está compartilhando a conexão rode também o servidor DHCP. A opção "option domain-name-servers" contém os servidores DNS que serão usados pelas estações. Ao usar dois ou mais endereços eles devem ser separados por vírgula, sem espaços. Ao fazer qualquer alteração no arquivo, você deve reiniciar o servidor DHCP usando o comando: # /etc/init.d/dhcp3-server restart Roberto Amaral – Marcelo Soares Farias Página 32 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Sempre que configurar um servidor com duas placas de rede, é importante que o servidor DHCP seja configurado para escutar apenas na placa da rede local. No Debian, esta configuração vai no arquivo "/etc/default/dhcp3-server". Procure pela linha: INTERFACES="" ... e adicione a placa que o servidor DHCP deve escutar, como em: INTERFACES="eth0" Para que a configuração entre em vigor, basta reiniciar o serviço novamente. Trabalho prático sobre conhecimentos adquiridos: Juntar a um amigo, utilize um dos computadores para ser o roteador (compartilhamento de conexão). 1º) Execício Máquina 1 Crie um alias (192.168.0.X) x = número da máquina. Crie um compartilhamento com iptable. Máquina 2 Coloque o endereço desta como 192.168.0.x x = número da máquina Coloque o Máquina 1 como gateway. Ping o site www.utp.br Com o Lynx verifique se sua conexão ficou correta, acessando o www.google.com.br 2º) Execício Máquina 1 Crie um alias (192.168.0.X) x = número da máquina. Crie um compartilhamento com iptables. Filtre com iptable o protocolo ICMP Máquina 2 Coloque o endereço desta como 192.168.0.x x = número da máquina Coloque o Máquina 1 como gateway. Ping o site www.utp.br Com o Lynx verifique se sua conexão ficou correta, acessando o www.google.com.br Roberto Amaral – Marcelo Soares Farias Página 33 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Universidade Tuiuti do Paraná – UTP Faculdade de Ciências Exatas e de Tecnologia Cursos de Computação Grupo de Estudos de Redes de Computadores e Sistemas Distribuídos Professores: Marcelo Soares Farias Roberto Néia Amaral Roberto Amaral – Marcelo Soares Farias Página 34 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Curitiba, 2008 Samba Com o SAMBA é possível compartilhar diretórios, impressoras, acessar arquivos na rede exatamente como em redes Microsoft. Mas neste caso, seu servidor é um Linux rodando uma aplicação específica. Instalação Para instalar o SAMBA é necessário executar o comando: ( apt-get install samba smbclient smbfs ) Algumas perguntas aparecerão e aparecem com a resposta sugerida: Senhas criptografadas? Sim Modificar para usar conf Wins do dhcp? Não Como deseja executar o Samba? Daemons Gerar a base de dados? Sim Configuração Toda a configuração do SAMBA é centralizada no arquivo smb.conf, que deve ser guardado no diretório /etc/samba. Nele é que são descritos os compartilhamentos, permissões de acesso, impressoras, dentre outras configurações disponíveis. Quando instalado, o SAMBA disponibiliza os seguintes componentes: smbd - O servidor SAMBA. nmbd - O Servidor de nomes NetBios. smbclient - Cliente SMB para sistemas Unix. smbpasswd - Alterar senhas (encriptadas) de usuários smb. smbspool - Cliente para envio de impresão a sistemas Linux. smbstatus - Apresenta a situação atual das conexoes SMB no Host. testparm - Verifica o arquivo smb.conf (configuração do SAMBA). testprns - Verifica a comunicação via rede com as impressoras. O smb.conf é dividido basicamente em três partes: a configuração do servidor SAMBA (parâmetros na seção [global]), a configuração dos diretórios/pastas pessoais dos usuários (parâmetros na seção [homes]) e as demais seções que correspondem aos diretórios compartilhados ou impressoras. Nome de máquina (nome NetBios) Toda a máquina em uma rede NetBEUI é identificada por um nome, este nome deve ser único na rede e permite que outras máquinas acessem os recursos disponibilizados ou que sejam enviadas mensagens para a máquina. Este nome é composto de 16 caracteres, sendo 15 que identificam a máquina e o último o tipo de serviço que ela disponibiliza. O tipo de serviço é associado com o nome da máquina e registrado em servidores de nomes confirme a configuração da máquina. Roberto Amaral – Marcelo Soares Farias Página 35 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Grupo de trabalho O grupo de trabalho organiza a estrutura de máquinas da rede em forma de árvore, facilitando sua pesquisa e localização. Tomemos como exemplo uma empresa grande com os departamentos comunicação, redes, web, rh, as máquinas que pertencem ao grupo de redes serão agrupadas no programa de navegação: redes técnico; marcelo; henrique; michelle rh burns web web1; web2; web3 comunicacao comunic1; comunic2; comunic3 A segurança no acesso a arquivos e diretórios na configuração de grupo de trabalho é controlada pela própria máquina, normalmente usando segurança a nível de compartilhamento. Esta segurança funciona definindo um usuário/senha para acessar cada compartilhamento que a máquina possui. O Lan Manager, Windows for Workgroups, Windows 95, Windows 98, XP Home Edition usam este nível de acesso por padrão. Domínio O funcionamento é semelhante ao grupo de trabalho, com a diferença que a segurança é controlada pela máquina central (PDC) usando diretivas de acesso e grupos. O PDC (Primary Domain Controller) deverá ter todas as contas de acesso que serão utilizadas pelo usuário para acessar os recursos existentes em outras máquinas, script de logon que poderá ser executado em cada máquina para fazer ajustes, sincronismo, manutenção ou qualquer outra tarefa programada pelo administrador do sistema. Compartilhamento Um compartilhamento é um recurso da máquina local que é disponibilizado para acesso via rede, que poderá ser mapeada por outra máquina. O compartilhamento pode ser um diretório, arquivo, impressora. Além de permitir o acesso do usuário, o compartilhamento pode ser protegido por senha, e ter controle de acesso de leitura/gravação, monitoração de acessos, diretórios ocultos, autenticação via PDC e outras formas para restringir e garantir segurança na disponibilidade dos dados. Um compartilhamento no SAMBA pode ser acessível publicamente (sem senha) ou estar rigidamente protegido tendo que passar por diversas barreiras para chegar ao seu conteúdo, como senhas, endereço de origem, interfaces, usuários autorizados, permissões de visualização, etc. Roberto Amaral – Marcelo Soares Farias Página 36 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Mapeamento Mapear significa pegar um diretório/arquivo/impressora compartilhado por alguma máquina da rede para ser acessada pela máquina local. Para mapear algum recurso de rede, é necessário que ele seja compartilhado na outra máquina. Por exemplo, o diretório /usr compartilhado com o nome usr, pode ser mapeado por uma máquina Windows como a unidade F:, ou mapeado por uma máquina Linux no diretório /mnt/samba. O programa responsável por mapear unidades compartilhadas no Linux é o smbmount e smbclient. Navegação na Rede e controle de domínio Esta função é controlada pelo nmbd que fica ativo o tempo todo disponibilizando os recursos da máquina na rede, participando de eleições NetBIOS, fazer logon de máquinas no domínio, etc. A função de navegação na rede é feita utilizando o compartilhamento IPC$. Este compartilhamento possui acesso público somente leitura e utiliza o usuário "guest" para disponibilização de seus recursos. OBS: A função de navegação (browsing) poderá não funcionar corretamente caso a máquina não consiga resolver nomes NetBIOS para endereços IP. smbmount O smbmount é uma ferramenta que permite a montagem de um disco compartilhado por uma máquina NetBEUI remota como uma partição. Alguns exemplos: smbmount //servidor/discoc /mnt/discoc Monta o compartilhamento de //servidor/discoc em /mnt/discoc usando o nome de usuário atual. Será pedido uma senha para acessar o conteúdo do compartilhamento, caso ele seja público, você pode digitar qualquer senha ou simplesmente pressionar enter. smbmount //servidor/discoc /mnt/discoc -N Semelhante ao comando cima, com a diferença que o parâmetro -N não pergunta por uma senha. Isto é ideal para acessar compartilhamentos anônimos. smbmount //servidor/discoc /mnt/discoc -o username=adminsamba,workgroup=teste Semelhante aos anteriores, mas acessa o compartilhamento usando adminsamba como nome de usuário e teste como grupo de trabalho. Este método é ideal para redes que tem o nível de acesso por usuário ou para acessar recursos compartilhados em um domínio. smbclient O smbclient é uma ferramenta de navegação em servidores SAMBA. Ao invés dela montar o compartilhamento como um disco local, você poderá navegar na estrutura do servidor de forma semelhante a um cliente FTP e executar comandos como ls, get, put para fazer a transferência de arquivos entre a máquina remota e a máquina local. Também é através dele que é feita a interface com impressoras compartilhadas remotamente. Alguns exemplos do uso do smbclient: Roberto Amaral – Marcelo Soares Farias Página 37 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX smbclient -L samba1 Lista todos os compartilhamentos existentes (-L) no servidor samba1. smbclient //samba1/discoc Acessa o conteúdo do compartilhamento discoc no servidor samba1. smbclient //samba1/discoc -N Idêntico ao acima, mas não utiliza senha (ideal para compartilhamentos com acesso anônimo). smbclient //samba1/discoc -I 192.168.1.2 Se conecta ao compartilhamento usando o endereço IP 192.168.1.2 ao invés da resolução de nomes. smbclient //samba1/discoc -U user -W teste Se conecta ao compartilhamento como usuário user usando o grupo de trabalho teste. smbclient //samba1/discoc -U user%senha01 -W teste Idêntico ao acima, mas também envia a senha senha01 para fazer a conexão diretamente. Caso receba a mensagem NT Status Access Denied, isto quer dizer que não possui direitos de acesso adequados para listas ou acessar os compartilhamentos da máquina. Nesse caso, utilize as opções -U usuário e -W grupo/domínio para fazer acesso com uma conta válida de usuário existente na máquina. OBS:Note que a ordem das opções faz diferença no smbmount. O smb.conf Um parâmetro é definido no formato nome = valor. Na configuração de booleanos, a seguinte sintaxe pode ser usada: 0 ou 1 - yes ou no - true ou false Linhas iniciadas por # ou ; são tratadas como comentário. Quebras de linha podem ser especificadas com uma \ no final da linha. Nomes e grupos de trabalho netbios name = [nome do servidor] Especifica o nome NetBIOS primário do servidor samba. Caso não seja ajustado, ele usará o hostname de sua máquina como valor padrão. Ex.: netbios name = Servidorsamba. workgroup = [grupo de trabalho/domínio] Diz qual o nome do grupo de trabalho/domínio que a máquina samba pertencerá. Ex.: workgroup = empresa. netbios aliases = [nomes alternativos ao sistema] Permite o uso de nomes alternativos ao servidor, separados por espaços. Ex.: teste1 teste2. server string = [identificação] Identificação enviada do servidor samba para o ambiente de rede. A string padrão é Samba %v (%v é substituída pela versão do samba) Ex: server string = Servidor Samba versão %v. name resolve order = [ordem] Roberto Amaral – Marcelo Soares Farias Página 38 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Define a ordem de pesquisa para a resolução de nomes no samba. A ordem padrão é: lmhosts host wins bcast, que é a melhor para resolução rápida e que tente gerar menos tráfego broadcast possível. Restrições de acesso/mapeamento de usuários guest account = [conta] Define a conta local de usuário que será mapeada quando um usuário se conectar sem senha (usuário guest). invalid users Define uma lista de usuários que não terão acesso aos recursos do servidor ou compartilhamento. É seguro restringir o acesso samba a usuários com grande poder no sistema (como o root). valid users Semelhante a opção invalid users mas permite que somente os usuários especificados tenham acesso ao sistema. default service = nome Caso o serviço que o usuário deseja se conectar não for encontrado no servidor, o SAMBA mapeará o serviço especificado nesta diretiva como alternativa. A variável "%S" e o caracter "_" podem ser interessantes em algumas alternativas de configuração. A opção default é um sinônimo para esta opção. Caso utilize esta opção, crie o compartilhamento em modo somente leitura e com acesso público, caso contrário (dependendo do planejamento de partições e segurança do sistema de arquivos) a máquina poderá ser derrubada sem dificuldades. username map = [arquivo] Especifica um arquivo que faz o mapeamento entre nomes fornecidos por clientes e nomes de contas Unix locais. obey pam restrictions = yes Indica se as restrições do usuário nos módulos PAM terão efeito também no SAMBA. Níveis de autenticação Define o nível de segurança do servidor. Os seguintes valores são válidos: share - Usada principalmente quando apenas a senha é enviada por compartilhamento acessado para o servidor, caso muito típico em sistemas Lan Manager e Windows for Workgroups. Mesmo assim o samba tenta mapear para um UID de usuário local do sistema usando os seguintes métodos (retirado da página de manual do samba): Se o parâmetro guest only é usado no compartilhamento junto com o guest ok, o acesso é imediatamente permitido, sem verificar inclusive a senha. Caso um nome de usuário seja enviado junto com a senha, ele é utilizado para mapear o UID e aplicar as permissões deste usuário (como acontece no nível de segurança user). Roberto Amaral – Marcelo Soares Farias Página 39 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Se ele usou um nome para fazer o logon no Windows este nome será usado como usuário local do SAMBA. Caso ele seja diferente, você deverá usar o mapeamento de nomes para associar o nome remoto do nome local O nome do serviço é tentado como nome de usuário. O nome da máquina NetBios é tentada como nome de usuário Os usuários especificados na opção user dos compartilhamentos são utilizados. Caso nenhum destes métodos acima for satisfeito, o acesso é NEGADO. Hoje em dia, o uso do nível de acesso share é raramente usado, porque todos os sistemas a partir do Windows 95 e acima enviam o nome de usuário ao acessar um compartilhamento (caindo na segunda checagem do nível share), sendo equivalente a usar o nível user. Entretanto, o nível de segurança share é recomendado para servidores onde TODO o conteúdo deve ter acesso público (seja leitura ou gravação) e o parâmetro guest shares também funciona nativamente. As senhas criptografadas (encrypt passwords = 1) NÃO funcionarão no nível share, lembre-se deste detalhe. user - Este é o padrão. O usuário precisa ter uma conta de usuário no Linux para acessar seus compartilhamentos. A mesma conta de usuário/senha deverá ser usada no Windows para acessar seus recursos ou realizado um mapeamento de nomes de usuários. Este é o padrão do SAMBA. No nível de acesso user o usuário precisa ser autenticado de qualquer forma, inclusive se for usado o parâmetro guest only ou user. Os seguintes passos são usados para autorizar uma conexão usando o nível user (retirado da documentação do SAMBA): É tentada a validação usando o nome/senha passados pelo cliente. Se tudo estiver OK, a conexão é permitida. Caso já tenha se autenticado anteriormente para acessar o recurso e forneceu a senha correta, o acesso é permitido. O nome NetBIOS da máquina do cliente e qualquer nome de usuário que foi usado é novamente tentado junto com a senha para tentar permitir o acesso ao recurso compartilhado. Caso o cliente tenha validado o nome/senha com o servidor e o cliente enviou novamente o token de validação, este nome de usuário é usado. É tentada a checagem com o parâmetro user no compartilhamento.. É verificado se o serviço é público, então a conexão é feita usando o usuário guest account e ignorando a senha. domain - Neste nível, o acesso só será permitido quando a máquina for adicionada ao domínio com o smbpasswd. Neste nível de acesso, a conta de usuário será validada em um servidor PDC (controlador de domínio) e o acesso aos recursos das máquinas que fazem parte do domínio será feito a partir do PDC. server - A máquina samba tentara autenticar o usuário em outro servidor NT (ou samba). No caso da autenticação falhar, será usado o nível de acesso user na base de usuários local (será necessário o arquivo de senhas criptografado do samba para que a autenticação local funcione. Este nível é bastante usado quando configuramos um servidor de perfis de usuários ou logon separado do PDC. Roberto Amaral – Marcelo Soares Farias Página 40 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Log de acessos/serviços log file= [arquivo] Define a localização e nome do arquivo de log gerado pelo samba. As variáveis de expansão podem ser usadas caso o administrador queira ter um melhor controle dos logs gerados. Ex.: /var/log/samba/samba-log%m. OBS: Se possível coloque uma extensão no arquivo de log gerado pelo SAMBA (como .log). O motivo disto é porque se estes logs forem rotacionados pelo logrotate você terá problemas de recompactação múltiplas caso utilize um coringa samba-log-*, gerando arquivos como .gz.gz.gz.., lotando a tabela de arquivos do diretório e deixando sua máquina em um loop de compactação. max log size = [tamanho] Especifica o tamanho máximo em Kb do arquivo de log gerado pelo samba. O valor padrão é 5000Kb (5MB). debug pid = [valor] Este processo adiciona a pid aos logs gerados pelo processo smbd Isto é útil para depuração caso existam múltiplos processos rodando. O valor padrão é no e a opção debug timestamp deve ser yes para esta opção ter efeito. debug timestamp = [valor] Ativa ou desativa a gravação de data/hora nos arquivos de log gerados pelo samba. O valor padrão é yes. debug level = [valor] Aumenta o nível de depuração dos daemons do SAMBA de 0 a 9. Um nível de depuração interessante e que produz uma quantidade razoável de dados para configuração de um logrotate só para o SAMBA é o 2, produzindo a lista de todos os compartilhamentos acessados, quem acessou, data/hora (dependendo das outras opções de depuração). Isto permite ao administrador saber exatamente o que está sendo acessado e por quem, quais as tentativas de acesso. Assim terá certeza que o conteúdo não está sendo acessado indevidamente. O nível de depuração 0 é o padrão. debug uid = [valor] Este parâmetro inclui o euid, egid, uid, gid nos arquivos de log. O valor padrão é no. lock directory = [diretório] Define onde serão gravados os arquivos de lock gerados pelo samba. Navegação no servidor/tipo de servidor os level=[num] Especifica o nível do sistema operacional. Este número é usado para as eleições netbios para definir o navegador de grupo local e controlador de domínio. O valor pode ser de 0 a 255, o padrão é 32. announce as = [sistema] Selecione o nome que o samba (nmbd) se anunciará na lista de pesquisa de rede. Os seguintes nomes podem ser usados: NT Server (ou NT) - Anuncia como Windows NT Server. Este é o padrão. NT Workstation - Anuncia-se como um NT Workstation. Roberto Amaral – Marcelo Soares Farias Página 41 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Win95 ou WfW - Anuncia-se na rede como uma estação Windows 9x, Windows for Workgroups, Windows NT Server e Windows NT Workstation de uma só vez. domain master = [valor] Diz se o servidor tentará se tornar o navegador principal de domínio. Os valores que podem ser especificados são: yes, no e auto. O valor padrão é auto. local master = [valor] Diz se o servidor participará ou não das eleições para navegador local do grupo de trabalho (workgroup). Os valores que podem ser especificados são: yes, no. O valor padrão é yes. Para vencer a eleição, o samba precisa ter o valor de os level maior que os demais. Note também que o Windows NT não aceita perder as eleições e convoca uma nova eleição caso ele perca. Como esta eleição é feita via broadcasting, isso gera um tráfego grande na rede. Desta forma, se tiver um computador NT na rede configure este valor para "no". preferred master = [valor] Diz se o servidor samba terá ou não vantagens de ganhar uma eleição local. Se estiver configurado para "yes", o servidor samba pedirá uma eleição e terá vantagens para ganha-la. O servidor poderá se tornar garantidamente o navegador principal do domínio se esta opção for usada em conjunto com domain master = 1. Os valores especificados podem ser yes, no e auto, o padrão é auto. Antes de ajustar este valor para yes, verifique se existem outros servidores NetBIOS em sua rede que tem preferência para se tornar o master principal, pois poderá ocorrer um tráfego alto de broadcasting causado pelas eleições solicitadas pelas outras máquinas. Seção [homes] Esta seção tem a função especial de disponibilizar o diretório home do usuário. Quando o usuário envia seu nome de login como compartilhamento é feita uma busca no arquivo smb.conf procurando por um nome de compartilhamento que confira. Caso nenhum seja encontrado, é feita uma busca por um nome de usuário correspondente no arquivo /etc/passwd, se um nome conferir e a senha enviada também, o diretório de usuário é disponibilizado como um compartilhamento com o mesmo nome do usuário local. O diretório home do usuário poderá ser modificado com o uso de mapeamento de nomes. Quando o caminho do compartilhamento não for especificado, o SAMBA utilizará o diretório home do usuário (no /etc/passwd). Para maior segurança da instalação, principalmente porque o diretório home do usuário não é um requerimento para a autenticação de usuário, recomendo usar a variável de substituição %S apontando para um diretório com as permissões apropriadas configuradas em seu sistema, por exemplo: [homes] comment = Diretórios de Usuários path=/pub/usuarios/%S Roberto Amaral – Marcelo Soares Farias Página 42 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Você apenas terá o trabalho extra de criar os diretórios de usuários que farão acesso ao sistema. Isto não será nenhum problema após você programar um shell script simples que verifique os nomes de contas em /etc/passwd e crie os diretórios com as permissões/grupos adequados. Os parâmetros aceitos em [homes] aqui são os mesmos usados para compartilhamentos normais. OBS1:Caso nenhum caminho de compartilhamento seja utilizado, o diretório home do usuário será compartilhado. OBS2:Não utilize o parâmetro public yes na seção guest, caso contrário todos os diretórios de usuários serão lidos por todos. Seção [printers] Esta seção tem a função de disponibilizar as impressoras existentes no sistema (lp, lp1, lp2, etc) existentes no /etc/printcap como compartilhamento de sistemas Windows. O método que os nomes de impressoras são pesquisados é idêntico a forma feita para a seção [homes]: Primeiro o nome do compartilhamento é pesquisado como um nome de serviço, depois se ele é um nome de usuário (tentando mapear o serviço disponibilizado em [homes]), depois será verificado a seção [printers]. OBS:É importante lembrar que a seção [printers] DEVE ser definida como printable usando o parâmetro printable = yes para funcionar. O utilitário testparm poderá ser usado para verificar problemas no arquivo de configuração do SAMBA. Compartilhamento de arquivos e diretórios Esta seção documenta como disponibilizar arquivos e impressoras com o SAMBA e os parâmetros usados para realizar restrições de compartilhamento, modo que os dados serão disponibilizados e itens de performance. A maior parte destes parâmetros é empregada em serviços do SAMBA, mas nada impede que também sejam colocados na seção [global] do arquivo de configuração, principalmente quando isto é válido para diversos serviços compartilhados. Descrição de parâmetros usados em compartilhamento Abaixo temos algumas das opções que podem ser usadas para controlar o comportamento do compartilhamento de arquivos por serviços no servidor SAMBA: path Indica o diretório que será compartilhado. Lembre-se que o usuário terá as permissões de acesso que ele teria caso estivesse logado no sistema como um usuário UNIX normal, exceto se estiver fazendo mapeamento para outros nomes de usuários. Ex: path=/pub - Compartilha o diretório local /pub. OBS: Quando não é definido um path, o diretório /tmp é usado como padrão. comment Descrição do compartilhamento que será mostrada na janela de procura de rede ou no smbclient -L maquina. Ex: comment=Pasta de conteúdo público do sistema. Roberto Amaral – Marcelo Soares Farias Página 43 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX browseable Define se o compartilhamento será ou não exibido na janela de procura de rede. Mesmo não sendo exibido, o compartilhamento poderá ser acessado. Ex: browseable=yes - Lista o compartilhamento na janela de pesquisa de servidores. guest account Conta que será usada para fazer acesso sem senha (convidado) quando o parâmetro guest ok ou public forem usados em um compartilhamento. Por padrão ela é mapeada para o usuário nobody. É importante especificar uma nome de usuário guest (convidado), principalmente porque seu UID será usado para fazer várias operações no SAMBA, como exibir os recursos disponíveis na máquina para a rede. Por motivos claros, é recomendável que este usuário não tenha acesso login ao sistema. Caso não tenha a intenção de ocultar o SAMBA na lista de máquinas da rede (fazendo apenas acesso direto aos recursos), especifique um valor para esta opção. Ex: guest account = sambausr - Mapeia os usuários se conectando sem senha para o usuário sambausr, desde que o acesso guest seja permitido pela opção public. public Permitem aos usuários usuários se conectarem ao compartilhamento sem fornecer uma senha usando o usuário guest. O UID que o usuário guest será mapeado é especificado pelo parâmetro guest account. O parâmetro guest ok é equivalente a public. Ex: public = no - Não permite guest only Permite somente conexões guest ao recurso. O UID do usuário é mapeado para guest, mesmo que forneça uma senha correta. O valor padrão é no. Ex: guest only = no. write list Lista de usuários separados por espaço ou vírgula que poderão ler e gravar no compartilhamento. Caso o nome for iniciado por "@", o nome especificado será tratado como um grupo UNIX (/etc/group) e todos os usuários daquele grupo terão acesso de gravação. O uso deste parâmetro ignora o read only = yes. Ex: write list = adminsamba, @usuarios - Permite acesso gravação somente do usuário adminsamba e todos os usuários pertencentes ao grupo @usuarios. OBS: - O significado de "@" nos parâmetros "invalid users"/"valid users" é diferente das opções write list e read list. read list Lista de usuários separados por espaço ou vírgula que poderão apenas ler o compartilhamento. O caracter "@" pode ser especificado para fazer referência a grupos, como no write list. O uso deste parâmetro ignora o read only = no. Ex: read list = nobody, system, operador, @usuarios - Permite acesso de leitura somente do usuário nobody, system, operador e todos os usuários pertencentes ao grupo @usuarios. user Especifica um ou mais nomes de usuários ou grupos (caso o nome seja seguido de "@") para checagem de senha. Quando o cliente somente fornece uma senha (especialmente na rede Lan Manager, Windows for Roberto Amaral – Marcelo Soares Farias Página 44 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Workgroups e primeira versão do Windows 95) ela será validada no banco de dados de senhas usando o usuário especificado nesta opção. Ex: user = john @usuariosrede only user Especifica se somente serão permitidas conexões vindas de usuários da diretiva user. O padrão é no. Caso deseje restringir o acesso a determinados usuários, o certo é faze-lo usando valid users e invalid users. O uso de only user é apropriado quando é necessário um controle específico de acesso sobre a diretiva user. Ex: only user = no. locking Permite ao SAMBA fazer um lock real de arquivo ou apenas simular. Caso seja especificado como "0", o arquivo não é bloqueado para acesso exclusivo no servidor mas uma resposta positiva de lock é retornada ao cliente. Se definido como "1", um lock real é feito. O padrão é yes. Ex: locking = yes available Faz o SAMBA ignorar o compartilhamento (como se tivesse retirado do servidor). O valor padrão é "no". follow symlinks Permite o uso de links simbólicos no compartilhamento (veja também a opção wide links). A desativação desta opção diminui um pouco a performance de acesso aos arquivos. Como é restrita a compartilhamento, o impacto de segurança depende dos dados sendo compartilhados. O valor padrão desta opção é "YES". Ex: follow symlinks = yes wide links Permite apontar para links simbólicos para fora do compartilhamento exportado pelo SAMBA. O valor padrão esta opção é "YES". Ex: wide links = yes. OBS: - A desativação desta opção causa um aumento na performance do servidor SAMBA, evitando a chamada de funções do sistema para resolver os links. Entretanto, diminui a segurança do seu servidor, pois facilita a ocorrência de ataques usando links simbólicos. Lembre-se mais uma vez que a segurança do seu sistema começa pela política e uma instalação bem configurada, isso já implica desde a escolha de sua distribuição até o conhecimento de permissões e planejamento na implantação do servidor de arquivos. dont descend Não mostra o conteúdo de diretórios especificados. Ex: dont descend = /root, /proc, /win/windows, "/win/Arquivos de Programas", "/win/program files". printable Especifica se o compartilhamento é uma impressora (yes) ou um compartilhamento de arquivo/diretório (no). O padrão é "no". read only Especifica se o compartilhamento é somente para leitura (yes) ou não (no) para todos os usuários. O parâmetro writable é um antônimo equivalente a este parâmetro, só que utiliza as opções invertidas. Por segurança, o valor padrão é somente leitura. Ex: read only = yes. create mask Roberto Amaral – Marcelo Soares Farias Página 45 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Modo padrão para criação de arquivos no compartilhamento. O parâmetro "create mode" é um sinônimo para este. O modo de arquivos deve ser especificado em formato octal. Ex: create mask = 0600. directory mask Modo padrão para a criação de diretórios no compartilhamento. O parâmetro "directory mode" é um sinônimo para este. O modo de diretório deve ser especificado em formato octal. Ex: directory mask = 0700. getwd cache Permite utilizar um cache para acesso as requisições getwd, diminuindo o número de ciclos de processamento para acesso a arquivos/diretórios. O valor padrão é "Yes". write cache size Tamanho do cache de leitura/gravação do compartilhamento. Este valor é especificado em bytes e o padrão é "0". Ex: write cache size = 384000. inherit permissions Permite herdar permissões de arquivos/diretórios do diretório pai quando novos arquivos/diretórios são criados, isto inclui bits SGID (set group ID). O padrão é NÃO herdar permissões. O uso desta opção substitui as opções fornecidas por create mask, directory mask, force create mask e force directory mask. Ex: inherit permissions. preexec Executa um comando antes a abertura de um compartilhamento. O parâmetro exec é um sinônimo para este. postexec Executa um comando depois da utilização do compartilhamento. preexec close Fecha imediatamente o compartilhamento caso o valor do comando executado pela opção preexec seja diferente de 0. O uso desta opção só faz sentido em conjunto com preexec. O valor padrão é "no". Exemplo: preexec close = yes. volume = nome Retorna o nome de volume especificado quando é feito o acesso ao compartilhamento. Isto é muito útil para instalações onde o serial do CD, disquete ou HD é verificado durante o acesso. Isto acontece com freqüência em produtos de fabricantes proprietários como forma de evitar a execução ilegal do programa. WINS Este é um serviço de resolução de nomes que funciona de forma semelhante ao DNS, só que voltado para o NetBIOS. Quando uma máquina cliente NetBIOS entra na rede, o servidor WINS pega seu nome e IP e inclui em uma tabela para futura consulta pelos clientes da rede. Esta tabela consultada toda vez que um cliente NetBIOS solicita um nome de máquina, componentes do grupo de trabalho ou domínio na rede. Uma outra aplicação importante de um servidor WINS é permitir a resolução de nomes em pontos de redes que requerem roteamento, a simplicidade de um protocolo não roteável como o NetBIOS fica limitada a simplicidade das instalações de rede. Um servidor WINS pode ser instalado em cada ponta da rede e eles trocarem dados entre si e atualizar suas tabelas de nomes/grupos de trabalhos/IPs. A resolução de nomes de máquinas será feita consultando diretamente a máquina WINS ao invés de broadcasting (que geram um tráfego alto na rede). Roberto Amaral – Marcelo Soares Farias Página 46 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Configurando o servidor WINS Para ativar o servidor WINS no samba, inclua as seguinte linha na seção [global] do seu arquivo /etc/samba/smb.conf: [global] wins support = yes wins proxy = no dns proxy = no max wins ttl = 518400 O parâmetro wins proxy pode ser necessário para alguns clientes antigos que tenham problemas no envio de suas requisições WINS. O dns proxy permite que o servidor WINS faça a pesquisa no DNS para localização de nomes de máquinas caso não exista no cache. Ambas as opções wins support, wins proxy e dns proxy tem como valor padrão não. Se estiver configurando uma subrede com masquerade para acesso a um PDC ou um servidor WINS, você terá que mexer no gateway central para apontar uma rota para o gateway masquerade. O motivo disto é porque o masquerade do Linux atua somente nos cabeçalhos, mas o IP da estação é enviada e processada pelo PDC para retornar uma resposta. Da mesma forma, este IP é registrado no servidor WINS para uso das estações de trabalho. Isto só vai ser resolvido quando for escrito um módulo de conntrack para conexões SAMBA. OBS1: NUNCA configure mais de um servidor WINS em uma mesma rede. OBS2: NÃO especifique o parâmetro wins server caso esteja usando o suporte a WINS. Ativando o suporte a senhas criptografadas O uso de senhas criptografadas é um requisito quando você deseja configurar o SAMBA para ser um servidor PDC ou um cliente de um domínio. Quando utiliza senhas criptografadas, elas trafegam em formato seguro através da rede, dificultando a captura por outras pessoas. Em versões mais recentes do Windows (a partir da OSR/2 e NT 4 service pack3) o suporte a senhas criptografadas vem habilitado como padrão para login e utilização de serviços da rede. O utilitário smbpasswd é o programa utilizado para gerenciar o arquivo de senhas e também o status de contas de usuários/máquinas do domínio. Edite o arquivo /etc/samba/smb.conf e altere as seguintes linhas na seção [global] para adicionar o suporte a senhas criptografadas: [global] encrypt passwords = true smb passwd file =/etc/samba/smbpasswd A linha encrypt passwords = true diz para usar senhas criptografadas e que o arquivo /etc/samba/smbpasswd contém as senhas (smb passwd file =/etc/samba/smbpasswd). Roberto Amaral – Marcelo Soares Farias Página 47 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Opções da conta criada no smbpasswd: U - Especifica que a conta é uma conta de usuário normal D - Significa que a conta foi desativada com a opção -d W - Especifica que a conta é uma conta de máquina criada com a opção -m N - A conta não possui senha Para ativar a conta do usuário adminsamba, usamos o comando: smbpasswd -U adminsamba Digite a senha do usuário e repita para confirmar. Assim que a senha for definida, a conta do usuário é ativada. Você também pode especificar a opção "-s" para entrar com a senha pela entrada padrão (muito útil em scripts). Apenas tenha cuidado para que esta senha não seja divulgada em seus arquivos/processos. Reinicie o processo do SAMBA. Verifique se o suporte a senhas criptografadas está funcionando com o comando: smbclient -L localhost -U adminsamba Substitua localhost pelo IP do servidor e adminsamba pelo usuário. Caso obtenha a mensagem session setup failed: NT_STATUS_LOGON_FAILURE significa que a senha informada está incorreta. Migrando de senhas texto plano para criptografadas No SAMBA, é possível fazer um processo de migração de senhas em texto plano de usuários para criptografadas sem que eles deixem de acessar o servidor durante esta mudança. Caso este seja seu caso, insira o parâmetro update encrypted = yes na seção [global] do seu arquivo de configuração smb.conf. A senha criptografada é definida assim que o usuário se logar usando sua senha em texto plano. Não se esqueça de desativar esta opção ou remove-la após o prazo necessário para que todas as senhas sejam trocadas. Adicionando usuários no smbpasswd A adição de um usuário no smbpasswd segue duas etapas: primeiro é necessário adiciona-lo no sistema com o adduser e depois no samba com o smbpasswd. Você deve estar se perguntando qual a vantagem de se ter um arquivo separado de usuários se ainda é preciso criar o login nos dois arquivos; O SAMBA para fazer o controle de acesso aos arquivos utiliza além dos mecanismos tradicionais do NT, o controle de permissões a nível UNIX para manter os arquivos ainda mais restritos. Além disso, será necessário usuários e grupos para criação e acesso ao sistema. Adicione um usuário no sistema com o comando: Roberto Amaral – Marcelo Soares Farias Página 48 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX useradd -g grupo-dominio -c "Usuário de Domínio" -s /bin/false -d /dev/null joão Este comando adiciona o usuário "joao" no grupo grupo-dominio e não define nem uma shell, diretório home nem senha para este usuário. Isto mantém o sistema mais seguro e não interfere no funcionamento do SAMBA, pois somente é necessário para fazer o mapeamento de UID/GID de usuários com as permissões do sistema UNIX. É interessante padronizar os usuários criados no domínio para um mesmo grupo para pesquisa e outras coisas. Crie o usuário "joao" no SAMBA: smbpasswd -a joao Será solicitada a senha do usuário. Removendo usuários do smbpasswd Utilize o comando smbpasswd -x usuario para remover um usuário do arquivo smbpasswd. Se desejar, você pode manter o usuário no /etc/passwd ou remove-lo com o userdel. OBS: Removendo um usuário deste arquivo fará que ele não tenha mais acesso ao SAMBA. Utilize o comando smbpasswd -a teste Desabilitando uma conta no smbpasswd Como administrador, pode ser necessário que precise desativar temporariamente uma conta de usuário por alguma situação qualquer (má utilização de recursos, dúvida se a conta está sendo usada, etc.). Remover uma conta e novamente adicioná-la então não é uma situação muito prática. Utilize então o seguinte comando para desativar uma conta de usuário: smbpasswd -d usuário Quando a conta de usuário é desativada, uma flag "D" é adicionada às opções do usuário (junto com as opções "UX"). Roberto Amaral – Marcelo Soares Farias Página 49 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Habilitando uma conta no smbpasswd Uma conta desativada com o uso do comando smbpasswd -d pode ser novamente ativada usando: smbpasswd -e usuario Alterando a senha de um usuário O utilitário smbpasswd pode ser usado tanto para alterar a senha de usuários locais do SAMBA ou de uma conta em um servidor remoto (seja SAMBA, NT, W2K). Para alterar a senha de um usuário local, digite: smbpasswd -U usuario Será pedida a antiga senha, a nova senha e a confirmação. Caso seja o usuário root, somente a nova senha e a confirmação. Isto é mecanismo de proteção para usuários que esquecem a senha. Para alterar a senha de um usuário remoto, utilize: smbpasswd -r servidor -U usuário Note que apenas foi adicionada a opção -r servidor comparado com a opção anterior. A diferença é que a senha antiga do usuário sempre será solicitada para troca (pois o root das 2 máquinas pode não ser o mesmo). Definindo acesso sem senha para o usuário Para fazer um usuário acessar sem senha, use o comando: smbpasswd -n usuario Isto é completamente desencorajado e necessita que a opção null passwords da seção [global] no arquivo smb.conf esteja ajustada para yes (que NÃO é o padrão). Ativando o suporte a senhas em texto plano Esta forma de autenticação é enviada por implementações NetBIOS antigas, como a encontrada no Lan Manager, Windows for Workgroups e Windows 95 OSR1. As versões mais novas destas implementações enviam a senha em formato criptografado, sendo necessário também usar o formato criptografado no SAMBA para que possa se autenticar. Em geral, o administrador prefere a utilização da autenticação usando texto plano quando deseja usar o /etc/passwd para autenticação e está usando grupos de trabalho é necessário usar senhas criptografadas para autenticação). Para configurar o SAMBA para utilizar senhas em texto, modifique o parâmetro encrypt passwords para no: [global] encrypt passwords = no Roberto Amaral – Marcelo Soares Farias Página 50 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Reinicie o SAMBA e a partir de agora, ele usará o /etc/passwd para autenticação. OBS: Tenha certeza de não estar participando de um domínio ou que sua máquina seja o PDC antes de fazer esta modificação. Configuração em Domínio Esta seção descreve todos os passos necessários para configurar um servidor de domínio PDC (Primary Domain Control) com perfis móveis e outros recursos que tornam úteis e seguras a administração de uma rede NetBEUI. Uma breve introdução a um Domínio de rede Um domínio de rede consiste em uma máquina central chamada de PDC, que mantém o controle de todas as contas de usuários/grupos e permissões para acesso a rede NetBEUI. O acesso desta forma é centralizado, como vantagem disto você pode usar o nível de acesso por usuários nas máquinas, definindo quais usuários ou grupos terão acesso de leitura/gravação. É permitido criar scripts de logon, assim comandos programados pelo administrador serão executados nas máquinas clientes durante o logon no. O nome da máquina é protegido contra hijacking através de contas de máquinas que fazem parte do domínio. Isto só é possível em clientes Linux, Windows NT, Windows 2000 e Windows XP. Você poderá usar perfis móveis, copiando todas as personalizações do seu desktop para qualquer máquina na rede que você faça o logon. Para o administrador, ele poderá definir políticas com o Poledit e outros programas que serão salvas junto com o perfil do usuário, valendo para qualquer máquina que ele se autentique na rede. Local Master Browser É a máquina que ganhou a eleição no segmento local de rede. Logo que é declarada o local master browser, ela começa a receber via broadcasting a lista de recursos compartilhados por cada máquina para montar a lista principal que será retornada para outras máquinas do grupo de trabalho ou outras subredes que solicite os recursos compartilhados por aquele grupo. Uma nova eleição é feita a cada 36 minutos ou quando a máquina escolhida é desligada. Domain Master Browser Quando o local master browse é eleito no segmento de rede, uma consulta é feita ao servidor WINS para saber quem é o Domain Master Browse da rede para enviar a lista de compartilhamentos. A máquina escolhida como Local Master Browse envia pacotes para a porta UDP 138 do Domain Master e este responde pedindo a lista de todos os nomes de máquinas que o local master conhece, e também o registra como local master para aquele segmento de rede. Caso tenha configurado sua máquina para ser o domain master browser da rede (também chamado de controlador principal de domínio ou PDC), ela tentará se tornar a máquina que terá a lista completa de recursos Roberto Amaral – Marcelo Soares Farias Página 51 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX enviados pelos locais master browsers de cada segmento de rede. Um PDC também é o local master browse de seu próprio segmento de rede. É possível ter mais de um domain master browse, desde que cada um controle seu próprio domínio, mas não é possível ter 2 domain master browsers em um mesmo domínio. Caso utilize um servidor WINS em sua rede, o PDC fará consultas constantes em sua base de dados para obter a lista de domínios registrados. O domínio é identificado pelo caracter 1b na rede. OBS: O Windows NT configurado como PDC sempre tenta se tornar o domain master browser em seu grupo de trabalho. Não sendo possível retirar o Windows NT configurado como PDC do domínio (por alguma outra razão), a única forma será deixar ele ser o domain master browser. Se este for o caso, você poderá continuar lendo este documento para aprender mais sobre NetBIOS e talvez ainda mudar de idéia sobre manter o NT na rede após ver as características do SAMBA ;-) Configurando um servidor PDC no SAMBA Para configurar uma máquina para ser o PDC (Controladora Principal de Domínio ou Primary Domain Control), siga esta seqüência: Habilite o suporte a senhas criptografadas. Na seção [global], insira/modifique os seguintes parâmetros: ;Identificação da máquina e domínio netbios name = adminsamba workgroup = empresa ;níveis de acesso e funções do servidor security = user domain master = yes prefered master = yes local master = yes ; senhas criptografadas encrypt passwords = yes smb passwd file = /etc/samba/smbpasswd.db Onde os parâmetros significam: netbios name = adminsamba - Nome do computador. Este também será o nome usado pelas outras máquinas clientes quando for configurar o PDC (controlador de domínio). workgroup = empresa - Nome do domínio que está criando. Todas as máquinas que pertencerem a este domínio terão o nível de acesso definido pelo PDC. Note que o parâmetro workgroup também é usado ao especificar o nome do grupo de trabalho quando se é usado a configuração grupo de trabalho. Roberto Amaral – Marcelo Soares Farias Página 52 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX security = user - Requerido para controle de acesso por domínio, já que é utilizado o controle de acesso local usando usuários e grupos locais. domain master = yes - Especifica se está máquina está sendo configurada para ser o PDC da rede. OBS: Certifique-se que não existe outro PDC no domínio. prefered master = yes - Força uma eleição com algumas vantagens para seu servidor ser eleito sempre como o controlador de domínio. Isto garante que a máquina SAMBA sempre seja o PDC. local master = yes - Define se a máquina será o controlador principal do grupo de trabalho local que ela pertence. Pronto, agora teste se existem erros em sua configuração executando o comando testparm e corrija-os se existir. Resta agora reiniciar o servidor nmbd para que todas as suas alterações tenham efeito. Contas de máquinas de domínio Uma conta de máquina de domínio garante que nenhum outro computador possa utilizar o mesmo nome de uma máquina confiável e assim utilizar os compartilhamentos que ela tem permissão. Os clientes Windows NT, Windows XP e Windows 2000 precisam de uma conta de máquina para ter acesso ao domínio e seus recursos. A criação de uma conta de máquina é bastante semelhante a criação da conta de um usuário normal no domínio. Existe uma coisa que precisa sempre ter em mente quando estiver configurando uma conta de máquina de domínio: Quando você cria uma conta para a máquina, ela entra e altera sua senha no próximo logon usando um "segredo" entre ela e o PDC, este segredo a identifica sempre como dona daquele nome NetBIOS, ou seja, até o primeiro logon no NT, outra máquina com o mesmo nome NetBIOS poderá ser a dona do netbios naquele domínio caso faça o logon no domínio. A única forma de se evitar isto é logar imediatamente no domínio NT assim que criar as contas de máquinas. Existem duas formas para criação de contas de máquinas: manual e automática. Criando contas de máquinas manualmente Para criar uma conta de domínio para a máquina master, siga estes 2 passos: Crie uma conta de máquina no arquivo /etc/passwd: useradd -g domainmac -c "Maquina de Dominio" -s /bin/false -d /dev/null master$ O comando acima cria uma conta para a máquina master$ e torna ela parte do grupo domainmac. É necessário especificar o caracter $ após o nome da máquina para criar uma conta de máquina no domínio, caso contrário o próximo passo irá falhar. Acredito que nas próximas versões do SAMBA seja desnecessário o uso do arquivo /etc/passwd para a criação de contas de máquina. Crie uma conta de máquina no arquivo /etc/samba/smbpasswd: smbpasswd -m -a master Roberto Amaral – Marcelo Soares Farias Página 53 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Isto cria uma conta de máquina para o computador master no arquivo /etc/samba/smbpasswd. Note que a criação de uma conta de máquina é muito semelhante a criação de um usuário apenas precisa adicionar a opção -m. Quando for criar uma conta com o smbpasswd Não é necessário especificar $ no final do nome da máquina. O mais importante: Entre IMEDIATAMENTE no domínio após criar a conta de máquina usando a conta de administrador de domínio criada no SAMBA. Como a máquina ainda não se autenticou pela primeira vez, qualquer máquina que tenha o mesmo nome e entre no domínio, poderá alocar o nome recém criado. A única forma de resolver este problema, é apagando a conta de máquina e criando-a novamente no domínio. Siga os passos de acordo com o sistema operacional em Configurando clientes em Domínio para colocar seus clientes em domínio. Criando contas de máquinas automaticamente Através deste método, as máquinas clientes terão sua conta criada automaticamente assim que seja feita a entrada no domínio usando a conta do administrador de domínio no SAMBA. Este é o método recomendável de colocação de máquinas no domínio por ser mais prática ao invés do método manual. Note que normalmente isto funciona para o WinXP e Win2000 mas não funciona em redes com o NT4, devendo ser criadas contas de máquinas usando o método manual. Para fazer a configuração automática, coloque a seguinte linha no arquivo smb.conf na seção [global]: add user script = useradd -g domainmac -c "Maquina de Dominio" -s /bin/false -d /dev/null %u Assim, a conta de máquina será automaticamente criada quando o administrador fizer sua configuração no domínio. No SAMBA 3.0, a opção add machine script deverá ser usada no lugar de add user script para adicionar uma máquina no domínio. Criando uma conta de administrador de domínio A conta de administrador do domínio é a conta que tem permissões para realizar operações de manutenção e administração de máquinas que compõem o domínio de rede. Com ela é possível, entre outras coisas, adicionar e remover máquina que compõem o domínio. Para especificar que contas de usuários do arquivo /etc/samba/smbpasswd que terão poderes administrativos, utilize a opção domain admin group ou admin users na seção [global] do arquivo /etc/samba/smb.conf. O parâmetro admin users permite que todas as operações realizadas pelo usuário sejam feitas com poderes de usuário root. Isto é necessário porque o arquivo smbpasswd (usado para ajustar as contas de máquinas) normalmente tem permissões de leitura/gravação somente para root. O domain admin group permite que usuários específicos ou usuários do grupo especificado sejam parte do grupo de administradores do domínio para adicionar máquinas, etc. Por exemplo, para tornar o usuário adminsamba com privilégios para adicionar/remover máquinas no domínio: Roberto Amaral – Marcelo Soares Farias Página 54 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX [global] ... admin users = adminsamba ou domain admin group = @admins adminsamba Isto permite que o usuário adminsamba possa adicionar/remover máquinas do domínio NT entre outras tarefas. Por segurança, recomendo que coloque esta conta no invalid users de cada compartilhamento para que seja utilizada somente para fins de gerenciamento de máquinas no domínio, a menos que deseje ter acesso total aos compartilhamentos do servidor (nesse caso, tenha consciência do nível de acesso que esta conta possui e dos problemas que pode causar caso caia em mãos erradas). Compartilhamento de impressão no servidor SAMBA Configurando o Linux como um servidor de impressão Windows Será necessário ter o pacote samba instalado e adicionar as seguintes linhas no seu arquivo /etc/samba/smb.conf: [hp-printer] path = /tmp printer name=HP DeskJet 690C printable = yes print command = lpr -r -h -P %p %s valid users = winuser winuser2 create mode = 0700 O compartilhamento acima tornará disponível a impressora local "lp" as máquinas Windows com o nome "HP DeskJet 690C". Uma impressora alternativa pode ser especificada modificando a opção -P da linha de comando do lpr. Note que somente os usuários "winuser" e "winuser2" poderão usar esta impressora. Os arquivos de spool (para gerenciar a fila de impressão) serão gravador em /tmp (path = /tmp) e o compartilhamento [hp-printer] será mostrado como uma impressora (printable = yes). Agora será necessário instalar o driver desta impressora no Windows (HP 690C) e escolher impressora instalada via rede e seguir os demais passos de configuração. Controle de acesso ao servidor SAMBA Nível de acesso de usuários conectados ao SAMBA Quando acessa um compartilhamento, o usuário do samba é mapeado com o UID respectivo de usuário do sistema ou o usuário guest (especificado pela opção "guest account") no caso de um acesso público. Quando isto ocorre, um processo filho do smbd é executado sobre o UID e GID deste usuário. Isto significa que em Roberto Amaral – Marcelo Soares Farias Página 55 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX nenhuma ocasião o SAMBA dará mais permissões que as necessárias para o usuário (com excessão de quando é usado o parâmetro admin users). Restringindo o acesso por IP/rede Esta restrição pode ser feita pelos parâmetros allow hosts e deny hosts tanto em serviços individuais ou em todo o servidor. Os parâmetros hosts allow e hosts deny são equivalentes a estes acima. O allow hosts permite o acesso a máquina especificadas como argumento. São permitidos os seguintes métodos para permitir o acesso a uma máquina/rede: 192.168.1.1 - IP da máquina servidor - Nome da máquina 192.168.1.0/255.255.255.0 - IP com máscara de rede 192.168.1.0/24 - IP com máscara de rede octal 192.168.1. - Porção de rede sem o host (como no hosts.allow e hosts.deny. @nome - Pesquisa por máquinas no grupo NIS. É permitido usar mais de um endereço IP separando-os por vírgulas ou espaços. A palavra chave EXCEPT pode ser usada para fazer excessão de um ou mais endereços IPs, por exemplo: hosts allow = 192.168.1. EXCEPT 192.168.1.20 Que permite o acesso a toda as máquinas da faixa de rede 192.168.1.0/24 exceto para a 192.168.1.20. O deny hosts possui a mesma sintaxe do allow hosts mas bloqueia o acesso das máquinas especificadas como argumento. Quando o allow hosts e deny hosts são usados juntos, as máquinas em allow hosts terão prioridade (processa primeiro as diretivas em allow hosts e depois em deny hosts). Se você está executando o SAMBA via inetd, os arquivos hosts.allow e hosts.deny são verificados antes do controle e acesso ao smbd. Caso estiver usando o SAMBA via inetd e deseja restringir o acesso usando TCP Wrappers. OBS: Lembre-se de usar o testparm para verificar a sintaxe do arquivo smb.conf sempre que desconfiar de problemas. Testando a restrição de Acesso por IP/Redes Um método interessante e útil para testar se a nossa configuração vai bloquear o acesso a serviços é usando o testparm da seguinte forma: testparm /etc/samba/smb.conf IP/host Você precisará dizer para o testparm qual é o arquivo de configuração que está usando e o endereço IP/nome de host que fará a simulação de acesso. Este método não falsifica o endereço IP para testes, apenas usa os valores em allow hosts e deny hosts para checagem. Por exemplo, para verificar o acesso vindo do IP 192.168.1.50: testparm /etc/samba/smb.conf 192.168.1.50 Load smb config files from /etc/samba/smb.conf Roberto Amaral – Marcelo Soares Farias Página 56 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Processing section "[homes]" Processing section "[printers]" Processing section "[tmp]" Processing section "[cdrom]" Loaded services file OK. Allow connection from /etc/samba/smb.conf (empresa) to homes Allow connection from /etc/samba/smb.conf (empresa) to printers Allow connection from /etc/samba/smb.conf (empresa) to tmp Allow connection from /etc/samba/smb.conf (empresa) to cdrom Restringindo o acesso por interface de rede Esta restrição de acesso permite que façamos o SAMBA responder requisições somente para a interfaces indicadas. O método de segurança descrito em Restringindo o acesso por IP/rede serão analisadas logo após esta checagem. Para restringir o serviço SAMBA a interfaces, primeiro será necessário ativar o parâmetro bind interfaces only usando 1, yes ou true (o padrão é desativado). Depois, definir que interfaces serão servidas pelo samba com o parâmetro interfaces. Os seguintes formatos de interfaces são permitidos: eth0, sl0, plip0, etc - Um nome de interface local. É permitido o uso de * para fazer o SAMBA monitorar todas as interfaces que iniciam com aquele nome (por exemplo, eth*). 192.168.1.1, 192.168.1.2, etc - Um endereço IP de interface local. 192.168.1.2/24, 192.168.1.2/255.255.255.0 - Um par de endereço/máscara de rede. Mais de uma interface pode ser usada separando-as com vírgula ou espaços. A escolha do uso de nome da interface ou do IP é feita de acordo com a configuração da máquina. Em uma máquina DHCP por exemplo, é recomendado o uso do nome da interface. Quando bind interfaces only estiver ativado, o padrão é esperar conexões em todas as interfaces que permitem broadcast exceto a loopback. Exemplo: bind interfaces only = 1 interfaces = loopback eth0 Permite o recebimento de requisições de acesso ao SAMBA somente da interface loopback (desnecessário, pois como notou durante a leitura, sempre é permitida a conexão) e eth0. Restringindo o acesso por usuários Permite que você controle quem poderá ou não acessar o compartilhamento da máquina. Este controle é feito pelos parâmetros valid users e invalid users. O invalid users lista de usuário que NÃO terão acesso ao compartilhamento. Se o nome for iniciado por "+" o parâmetro será tratado como um nome de grupo UNIX (/etc/group). O caracter "&" faz ele pesquisar o nome de Roberto Amaral – Marcelo Soares Farias Página 57 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX grupo no banco de dados NIS. O caracter "@" permite fazer a busca do grupo primeiro no banco de dados NIS e caso ele não seja encontrado, no arquivo de grupos do sistema (/etc/group). É possível usar a combinação de caracteres "+&" e "&+" para alternar a ordem de busca enter o /etc/group e o NIS. Exemplos: invalid users = junior, marcio, +badusers Não permite que os usuários especificados e os usuários do grupo +badusers tenham acesso ao compartilhamento. invalid users = &;semacesso Bloqueia o acesso de todos os usuários NIS que pertençam ao grupo semacesso. invalid users = bruno, henrique, +@users, Bloqueia o acesso dos usuários bruno, henrique e de todos os usuários que pertençam ao grupo users. A pesquisa de grupo é feita primeiro no /etc/group e em seguida no NIS. invalid users = @semacesso Bloqueia o acesso dos usuários que pertencem ao grupo "semacesso". A pesquisa é feita primeiro no NIS e depois no /etc/group (equivalente ao uso de "&+"). O valid users possui a mesma sintaxe de funcionamento do invalid users, mas permite somente o acesso para os usuários/grupos listados. Caso a opção valid users não seja especificada ou a lista esteja vazia, o acesso é permitido. Se um mesmo nome de usuário estiver na lista valid users e invalid users, o padrão é ser mais restritivo, negando o acesso. valid users = adminsamba, michelle, geo A segurança deste método de acesso depende muito da forma de autenticação dos nomes antes de passar o controle para o SAMBA, pois uma autenticação fraca põe em risco a segurança da sua máquina. Evite o uso do parâmetro hosts equiv! Este parâmetro permite que máquinas tenham acesso sem senha a um servidor. Evite o uso de senhas em branco! O parâmetro null passwords é usado na seção [global] permitindo que contas de usuários sem senha tenham acesso permitido ao servidor. ISTO É TOTALMENTE INSEGURO e deve ser sempre evitado. Criando um compartilhamento para acesso sem senha Em algumas situações (mesmo em instalações seguras) é preciso tornar um compartilhamento acessível publicamente, exemplos disto incluem um diretório que contém drivers de impressoras, arquivos comuns, um diretório temporário, etc. Para configurar um acesso público utilizamos a opção public = yes ou guest ok = yes (que é um sinônimo para o último comando). O UID utilizado no acesso público é especificado pelo parâmetro guest account, portanto Roberto Amaral – Marcelo Soares Farias Página 58 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX ele deverá ser um usuário válido do sistema. Caso você queira somente definir acesso guest a um compartilhamento, especifique a opção guest only para o serviço, desta forma, mesmo que o usuário tenha acesso, ele será mapeado para o usuário guest. Uma boa medida de segurança é usar o usuário nobody pois a maioria das distribuições de Linux seguras adotam-o como padrão como usuário que não é dono de quaisquer arquivos/diretórios no sistema, não possui login, senha ou sequer um diretório home. Veja um exemplo disponibilizando o compartilhamento [download] para acesso público com acesso a gravação: [global] guest account = nobody .. .. [download] path = /downloads comment = Espaço público para abrigar downloads de Usuários guest ok = yes (aqui poderá ser também "public = yes"). writable = yes follow symlinks = false O parâmetro guest account também poderá ser especificado no compartilhamento, isto é útil quando não quiser que o usuário que acesse o compartilhamento não seja o mesmo usado na diretiva [global]. Caso seu servidor somente disponibiliza compartilhamentos para acesso público, é mais recomendado utilizar o nível security = share pra diminuir a carga máquina, pois o usuário guest será o primeiro a ser checado pelas regras de acesso (ao contrário do nível user, onde o acesso guest é o último checado). Criando um compartilhamento com acesso somente leitura Esta proteção é útil quando não desejamos que pessoas alterem o conteúdo de um compartilhamento. Isto pode ser feito de duas formas: negando o acesso de gravação para todo o compartilhamento ou permitindo leitura somente para algumas pessoas. O parâmetro usado para fazer a restrição de acesso somente leitura é o read only = yes ou seu antônimo writable = no. Abaixo seguem os dois exemplos comentados: [teste] comment = Acesso a leitura para todos path = /tmp read only = yes public = yes No exemplo acima, o diretório /tmp (path = /tmp) foi compartilhado com o nome teste ([teste]), de forma pública (acesso sem senha - public = yes), e todos podem apenas ler seu conteúdo read only = yes). Roberto Amaral – Marcelo Soares Farias Página 59 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX [teste] comment = Acesso a gravação para todos com excessões path = /tmp read only = no read list = @users, adminsamba invalid users = root Neste, o mesmo compartilhamento teste ([teste]) foi definido como acesso leitura/gravação para todos (read only = no), mas os usuários do grupo @users e o usuário adminsamba terão sempre acesso leitura (read list = @users, adminsamba). Adicionalmente foi colocada uma proteção para que o superusuário não tenha acesso a ele (invalid users = root). Esta forma de restrição é explicada melhor em Excessão de acesso na permissão padrão de compartilhamento). Criando um compartilhamento com acesso leitura/gravação Esta forma de compartilhamento permite a alteração do conteúdo do compartilhamento dos usuários que possuem as permissões de acesso apropriadas. Este controle pode ser feito de duas formas: Acesso total de gravação para os usuários e acesso de gravação apenas para determinados usuários. Este controle é feito pela opção read only = no e seu antônimo equivalente writable = yes. Abaixo dois exemplos: [teste] comment = Acesso de gravação para todos. path = /tmp writable = yes public = yes No exemplo acima, o diretório /tmp (path = /tmp) foi compartilhado com o nome teste ([teste]), de forma pública (acesso sem senha - public = yes) e todos podem ler/gravar dentro dele (writable = yes). [teste] comment = Acesso a leitura para todos com excessões path = /tmp writable = no write list = @users, adminsamba Neste, o mesmo compartilhamento teste ([teste]) foi definido como acesso de leitura para todos (writable = no), mas os usuários do grupo @users e o usuário adminsamba serão os únicos que terão também acesso a gravação (write list = @users, adminsamba). Esta forma de restrição é explicada melhor em Excessão de acesso na permissão padrão de compartilhamento). Roberto Amaral – Marcelo Soares Farias Página 60 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Excessão de acesso na permissão padrão de compartilhamento É possível alterar o nível de acesso para determinados usuários/grupos em um compartilhamento, para entender melhor: Caso tenha criado um compartilhamento somente leitura e queira permitir que apenas alguns usuários ou grupos tenham acesso a gravação, isto é possível e será explicado nesta seção. Este comportamento é controlado por duas opções: read list e write list. Veja alguns exemplos: [temporario] comment = Diretório temporário path = /tmp writable = yes read list = adminsamba, root browseable = no available = yes Neste exemplo, disponibilizamos o diretório /tmp (path = /tmp) como compartilhamento de nome temporario ([temporario]), seu acesso padrão é leitura/gravação para todos (writable = yes), exceto para os usuários root e adminsamba (read list = root, adminsamba). Em adição, tornamos o compartilhamento invisível no "Ambiente de Rede" do Windows (browseable = no) e ele será lido e disponibilizado pelo SAMBA (available = yes). [temporario] comment = Diretório temporário path = /tmp writable = no write list = adminsamba, @operadores browseable = yes Neste exemplo, disponibilizamos o diretório /tmp (path = /tmp) como compartilhamento de nome temporario ([temporario]), seu acesso padrão é apenas leitura para todos (writable = no), exceto para o usuário adminsamba e usuários do grupo Unix operadores, que tem acesso a leitura/gravação (write list = adminsamba, @operadores). Tornamos o compartilhamento visível no "Ambiente de Rede" do Windows (browseable = yes - que é o padrão). Criando um compartilhamento invisível Para não exibir um compartilhamento da lista de compartilhamentos das máquinas, utilize o parâmetro browseable = no. Por exemplo: [teste] path = /tmp comment = Diretório temporário read only = yes browseable = no Roberto Amaral – Marcelo Soares Farias Página 61 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Neste exemplo, o diretório /tmp (path = /tmp) foi compartilhado através de teste ([teste]) com acesso somente leitura (read only = yes) e ele não será mostrado na listagem de compartilhamentos do ambiente de rede do Windows (browseable = no). Note que o compartilhamento continua disponível, porém ele poderá ser acessado da estação Windows, especificando a \\maquina\compartilhamento. Para acessar o compartilhamento do exemplo acima: # Clique em Iniciar/Executar e digite: \\nome_do_servidor_samba\teste Ao contrário das máquinas Windows onde é necessário adicionar um "$" do nome de compartilhamento para criar um compartilhamento oculto (como teste$) o SAMBA cria um compartilhamento realmente oculto, não aparecendo mesmo na listagem do smbclient. Exemplos de configuração do servidor SAMBA Os exemplos existentes nesta seção cobrem diferentes tipos de configuração do servidor, tanto em modo de compartilhamento com acesso público ou um domínio restrito de rede. Todos os exemplos estão bem comentados e explicativos, apenas pegue o que se enquadre mais em sua situação para uso próprio e adaptações. Grupo de Trabalho com acesso público Este exemplo pode ser usado de modelo para construir uma configuração baseada no controle de acesso usando o nível de segurança share e quando possui compartilhamentos de acesso público. Esta configuração é indicada quando necessita de compatibilidade com softwares NetBIOS antigos. [global] # nome da máquina na rede netbios name = teste # nome do grupo de trabalho que a máquina pertencerá workgroup = empresa # nível de segurança share permite que clientes antigos # mantenham a compatibilidade enviando somente a senha para # acesso ao recurso, determinando o nome de usuário de outras # formas security = share # O recurso de senhas criptografadas não funciona quando usamos # o nível share de segurança. O motivo disto é porque # automaticamente é assumido que você está selecionando este # nível por manter compatibilidade com sistemas antigos ou para Roberto Amaral – Marcelo Soares Farias Página 62 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX # disponibilizar compartilhamentos públicos, onde encrypt passwords = false # Conta que será mapeada para o usuário guest guest account = nobody # Como todos os compartilhamentos desta configuração são de # acesso público coloquei este parâmetro na seção [global], # assim esta opção afetará todos os compartilhamentos. guest ok = 1 # Conjunto de caracteres utilizados para acessar os # compartilhamentos. O padrão para o Brasil e países de língua # latina é o ISO 8859-1 character set = ISO8859-1 # Compartilha o diretório /tmp (path = /tmp) com o nome # "temporario" ([temporario]), # é adicionada a descrição "Diretório temporário" com acesso # leitura/gravação (read only = no) e exibido na janela de # navegação da rede (browseable = yes). [temporario] path = /tmp comment = Diretório temporário read only = no browseable = yes # Compartilha o diretório /pub (path = /pub) com o nome # "publico" ([publico]). A descrição "Diretório de acesso # público" é associada ao compartilhamento com acesso somente # leitura (read only = yes) e exibido na janela de navegação # da rede (browseable = yes). [publico] path =/pub comment = Diretório de acesso público read only = yes browseable = yes # Compartilha todas as impressoras encontradas no /etc/printcap # do sistema. Roberto Amaral – Marcelo Soares Farias Página 63 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX [printers] comment = All Printers path = /tmp create mask = 0700 printable = Yes browseable = No Grupo de Trabalho com acesso por usuário O exemplo abaixo descreve uma configuração a nível de segurança por usuário onde existem compartilhamentos que requerem login e usuários específicos, e restrições de IPs e interface onde o servidor opera. Esta configuração utiliza senhas em texto claro para acesso dos usuários, mas pode ser facilmente modificada para suportar senhas criptografadas. [global] # nome da máquina na rede netbios name = teste # nome do grupo de trabalho que a máquina pertencerá workgroup = empresa # nível de segurança user somente aceita usuários autenticados # após o envio de login/senha security = user # É utilizada senhas em texto claro nesta configuração encrypt passwords = false # Conta que será mapeada para o usuário guest guest account = nobody # Permite restringir quais interfaces o SAMBA responderá bind interfaces only = yes # Faz o samba só responder requisições vindo de eth0 interfaces = eth0 # Supondo que nossa interface eth0 receba conexões roteadas de # diversas outras redes, permite somente as conexões vindas da # rede 192.168.1.0/24 hosts allow = 192.168.1.0/24 # A máquina 192.168.1.57 possui gateway para acesso interno, como # medida de segurança, bloqueamos o acesso desta máquina. hosts deny = 192.168.1.57/32 # Conjunto de caracteres utilizados para acessar os Roberto Amaral – Marcelo Soares Farias Página 64 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX # compartilhamentos. O padrão para o Brasil e países de língua # latina é o ISO 8859-1 character set = ISO8859-1 # As restrições do PAM terão efeito sobre os usuários e recursos # usados do SAMBA obey pam restriction = yes # Mapeia o diretório home do usuário autenticado. [homes] comment = Diretório do Usuário create mask = 0700 directory mask = 0700 browseable = No # Compartilha o diretório win (path = /win) com o nome "win" #([win]). A descrição associada ao compartilhamento será "Disco do Windows", o nome de volume precisa ser especificado pois usamos # programas que a proteção anti cópia é o serial. Ainda fazemos # uma proteção onde qualquer usuário existente no grupo @adm é # automaticamente rejeitado e o usuário "baduser" somente possui # permissão de leitura (read list = baduser). # [win] path = /win comment = Disco do Windows volume = 3CF434C invalid users = @adm browseable = yes read list = baduser # Compartilha o diretório /pub (path = /pub) com o nome "publico" # ([publico]). A descrição "Diretório de acesso público" é # associada ao compartilhamento com acesso somente leitura (read # only = yes) e exibido na janela de navegação da rede (browseable # = yes). O parâmetro public = yes permite que este # compartilhamento seja acessado usando o usuário "nobody" sem o # fornecimento de senha. Roberto Amaral – Marcelo Soares Farias Página 65 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX [publico] path =/pub comment = Diretório de acesso público read only = yes browseable = yes public = yes Domínio [global] # nome da máquina na rede netbios name = teste # nome do grupo de trabalho que a máquina pertencerá workgroup = empresa # String que será mostrada junto com a descrição do servidor server string = servidor PDC principal de testes # nível de segurança user somente aceita usuários autenticados # após o envio de login/senha security = user # Utilizamos senhas criptografadas nesta configuração encrypt passwords = true smb passwd file = /etc/samba/smbpasswd # Conta que será mapeada para o usuário guest guest account = nobody # Permite restringir quais interfaces o SAMBA responderá bind interfaces only = yes # Faz o samba só responder requisições vindo de eth0 interfaces = eth0 # como estamos planejando ter um grande número de usuários na # rede, dividimos os arquivos de log do servidor por máquina. log file = /var/log/samba/samba-%m-%I.log # O tamanho de CADA arquivo de log criado deverá ser 1MB (1024Kb). max log size = 1000 # Escolhemos um nível de OS com uma boa folga para vencer as # eleições de controlador de domínio local os level = 80 # Dizemos que queremos ser o Domain Master Browse (o padrão é Roberto Amaral – Marcelo Soares Farias Página 66 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX # auto) domain master = yes # Damos algumas vantagens para o servidor ganhar a eleição caso # aconteça desempate por critérios preferred master = yes # Também queremos ser o local master browser para nosso segmento # de rede local master = yes # Este servidor suportará logon de usuários domain logons = yes # Usuários que possuem poderes para adicionar/remover máquinas no # domínio (terão seu nível de acesso igual a root) admin users = adminsamba # Unidade que será mapeada para o usuário local durante o logon # (apenas sistemas baseados no NT). logon drive = m: # Nome do script que será executado pelas máquinas clientes logon script = logon.bat # Ação que será tomada durante o recebimento de mensagens do # Winpopup. message command = /bin/sh -c '/usr/bin/linpopup "%f" "%m" %s; rm %s' & # Conjunto de caracteres utilizados para acessar os # compartilhamentos. O padrão para o Brasil e países de língua # latina é o ISO 8859-1 character set = ISO8859-1 # As restrições do PAM terão efeito sobre os usuários e recursos # usados do SAMBA obey pam restriction = yes # Mapeia o diretório home do usuário autenticado. Este # compartilhamento especial é descrito em mais detalhes no inicio # do capítulo sobre o SAMBA no Foca Linux. [homes] comment = Diretório do Usuário create mask = 0700 Roberto Amaral – Marcelo Soares Farias Página 67 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX directory mask = 0700 browseable = No # Compartilha o diretório win (path = /win) com o nome "win" # ([win]). A descrição associada ao compartilhamento será "Disco # do Windows", o nome de volume precisa ser especificado pois # usamos programas que a proteção anti cópia é o serial. Ainda # fazemos uma proteção onde qualquer usuário existente no grupo # @adm é automaticamente rejeitado e o usuário "baduser" somente # possui permissão de leitura (read list = baduser). # [win] path = /win comment = Disco do Windows volume = 3CF434C invalid users = @adm browseable = yes read list = baduser # Compartilha o diretório /pub (path = /pub) com o nome "publico" # ([publico]). A descrição "Diretório de acesso público" é # associada ao compartilhamento com acesso somente leitura (read # only = yes) e exibido na janela de navegação da rede (browseable # = yes). O parâmetro public = yes permite que este # compartilhamento seja acessado usando o usuário "nobody" sem o # fornecimento de senha. [publico] path =/pub comment = Diretório de acesso público read only = yes browseable = yes public = yes # Compartilhamento especial utilizado para o logon de máquinas na # rede [netlogon] path=/pub/samba/netlogon/logon.bat read only = yes Roberto Amaral – Marcelo Soares Farias Página 68 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Servidor de Informação (NIS) O sistema NIS (Network Information System) permite compartilhar bases de dados globais, contendo informações sobre usuários (/etc/passwd), grupos (/etc/group) e hosts (/etc/hosts) em ambiente Unix. Informações compartilhadas por servidores NIS são visíveis pelos cliente, servindo, por exemplo, para a autenticação de usuários num domínio de redes. As informações compartilhadas pelo NIS eram chamadas de Yellow Pages – yp. A unidade de compartilhamento do NIS são os registros e não o arquivo. Um registro corresponde a uma linha de configuração em um arquivo de configuração. A operação deste sistema envolve a execução de um processo servidor (ypserv) numa máquina que será o mestre de um domínio (NIS máster) e a execução da versão cliente do programa (ypbind) nas máquinas clientes. A utilização dos arquivos compartilhados para autenticação dos usuários nos cliente, contudo, depende ainda dos ajustes de autenticação. • ypserv: processo servidor do NIS; • ypbind: processo cliente NIS; • yppasswdd: processo de autenticação/modificação de senhas via rede. Deve ser executado no servidor mestre do domínio; • ypinit: script de configuração do servidor NIS (como principal ou secundário). Cria as tabelas a partir dos arquivos em /etc; • yppush: comando para cópia dos arquivos do mestre para os escravos; • portmap: faz o mapeamento entre chamada RPC e número de portas para o serviço NIS; • /etc/yp.conf: arquivo de configuração do cliente NIS; • /etc/ypserv.conf: arquivo de configuração do servidor NIS; • /var/yp: arquivos de configuração e tabelas de domínio exportado pelo servidor; • /var/yp/ypservers; relação dos servidores do domínio; • /var/yp/securenets: relação de redes e hosts autorizados a acessar as informações do domínio Configuração do servidor Antes que o servidor NIS possa ser ativado, é preciso criar as tabelas exportadas. Para simplificar a construção das tabelas exportadas, entretanto, há um arquivo de configuração em /var/yp. Sua operação requer apenas que o nome do domínio NIS que se deseja atender esteja configurado: Roberto Amaral – Marcelo Soares Farias Página 69 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX • Domainname: define o nome do domínio DNS. Ex: domainname gerds.utp.br • Ypdomainname, nisdomainname: define o nome do domínio NIS. Ex. ypdomainname gerds.utp.br Embora sejam normalmente coincidentes, não há restrições entre o nome de domínio DNS e o domínio NIS. A configuração de um servidor NIS requer a instalação do pacote ypserv. Uma vez ajustado o domínio NIS que se deseja gerenciar, é preciso ajustar os scripts de configuração das tabelas exportadas, localizados no diretório /var/yp. • /var/yp: diretório que contém os arquivos para configuração do servidor NIS e as tabelas exportadas; • /var/yp/Makefile: arquivo de configuração das tabelas que serão criadas para exportação. Configuração (manual) de um servidor NIS: 1. Definição do domínio: domainname dom.com.br ou ypdomainname dom.com.br ou nisdomaniname dom.com.br 2. Ajuste das tabelas exportadas (/var/yp/Makefile) : cd /var/yp #editar /var/yp/Makefile #editar linha all: passwd group hosts ... contém relação dos mapas que serão criados para exportação #editar linha MERGE_PASSWD=true indica se passwd e shadow serão unificados para exportação #editar linha MERGE_GROUP=true indica se group e gshadow serão unificados para exportação #editar linha MINUID=500 início dos logins exportados #editar linha MINGID=500 início dos grupos exportados 3. Criação das tabelas exportadas Make cria tabelas para domínio definido com ypdomaninname, caso não existam, ou atualiza as tabelas existente. Roberto Amaral – Marcelo Soares Farias Página 70 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX OBS.: O padrão é utilizar os arquivos em /etc como fonte para geração dos maas do NIS. É possível alterar este padrão, editando o arquivo /var/yp/Makefile, modificando as variáveis YPSRCDIR e YPPWDDDIR para que indiquem o diretório onde estão os arquivos. Assim, é viável manter usuários locais e do NIS de forma independente. As opções MINUID e MINGID também permitem restringir os usuários que serão exportados. Os comandos executados pelo make, equivalem a criação das tabelas, utilizando os comandos abaixo: • /usr/lib/yp/ypinit –m: script para criação das tabelas do servidor. Este script, executando com opção –m, configura o servidor como “mestre”(ou principal), pegando como informações os dados contidos em /etc/passwd, /etc/group, /etc/hosts, /etc/networks, /etc/services, /etc/protocols, /etc/netgroup e /etc/rpc. Inclui, linha a linha, os servidores do NIS. • /usr/lib/yp/yp/ypinit –s nome-do-servidor-principal. A opção –s, seguida do nome do servidor mestre, configura o servidor “escravo” (ou secundário). Pode haver um único mestre, mas várias escravos. 4. Ajustes de segurança: limitar o acesso aos campos das tabelas exportadas editando /etc/ypserv.conf Uma vez definidas as tabelas que serão exportadas, é preciso realizar ajustes de segurança antes de ativar o servidor (ypserv). O ajuste de opção de segurança dos mapas exportados é feito através do arquivo /etc/ypserv.conf. • /etc/ypserv.conf: arquivo com parâmetros para o servidor do domínio NIS: i. Dns: indica se o servidor fará consultas ao servidor DNS para a resolução de nomes de domínio não atendidos por /etc/hosts ii. Cada linha contém informações sobre uma tabela exportada, incluindo os seguintes campos, separados por “:”:host, mão, security, mangle e field 1. host: endereço IP 2. map: nome do mapa ou *, para todos os mapas 3. security: nome (sempre permite acesso), port (permite acesso se porta < 1024), deny (nega acesso a este mapa), des (exige autenticação no formato DES); 4. mangle: yes ou no. Substitui valor de campo nas informações exibidas caso o usuário não tenha acesso. 5. field: indica o campo que será substituído (mangled). Defaul=2 Roberto Amaral – Marcelo Soares Farias Página 71 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Exemplo: # /etc/ypserv.conf # HOST: Domain :Map :Security # * :* :passwd.byname :port # restringe o acesso a tabela * :* :passwd.byuid :port # restringe o acesso a tabela 5. Restringir os hosts que poderão fazer a autenticação de usuários usando as tabelas exportadas (/var/yp/securenets) A relação de clientes autorizados a usar as tabelas do sistema (nis clients) é definida através do arquivo /var/yp/securenets. As linhas do arquivo contêm informações sobre as máscaras de rede e os endereços IP autorizados. # /var/yp/securenets # 255.0.0.0 127.0.0.0 #libera acesso para o localhost 255.255.255.0 200.1.1.0 #libera acesso para a rede 200.1.1.0 6. Ativação do serviço do servidor: A ativação do servidor é feita iniciando-se o processo ypserv (/usr/sbin/ypserv). O ajuste para sua ativação automática nos níveis de execução multiusuário pode ser feita como descrito anteriormente. AplicaçõesConfigurações do SistemaConfigurações de ServidorServiços Portmap Ypserv O serviço ypxferd pode ser ativado para auxiliar na transferência dos mapas entre o servidor NIS máster e os servidores slave: Ypxferd 7. Habilitando o ajuste de senhas pela rede (yppasswdd): A alteração de senha no ambiente NIS pode ser feita com o comando yppasswd. Para tanto, ;e preciso que o serviço yppasswdd esteja sendo executado no servidor NIS, caso contrário, os usuários deverão fazer um acesso remoto ao servidor para alterar a senha localmente com o comandopasswd. Neste caso, ainda, a nova senha só se torna cálida após a reiniciação do servidor NIS (ypserv). AplicaçõesConfigurações SistemasConfigurações de ServidorServiços Yppasswdd Roberto Amaral – Marcelo Soares Farias Página 72 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Nos clientes, a senha da rede pode ser alterada executando-se o comando yppasswd. Configuração dos clientes para realizarem acessaem um servidor NIS corresponde a habilitar a autenticação usando NIS. HTTPD - Servidor Web Apache2 O Apache é o Servidor Web mais utilizado sendo utilizados para servir pedidos de Páginas WEB por clientes. Os clientes em geral fazem requisições e visualizam Páginas da WEB usando navegadores. Usuários utilizam URL (Uniform Resource Locator) para apontar para um servidor Web através do seu Nome de Domínio Completo (Fully Qualified Domain Name - FQDN) e um caminho. O protocolo mais comum usado para transferir páginas é o HTTP - Protocolo de transferência de hipertexto. Protocolos como HTTPS - Protocolo seguro de transferência de hipertexto e FTP - Protocolo de transferência de arquivo, protocolo para enviar e receber arquivos, são também suportados. Servidores Web Apache são geralmente utilizados em conjunto com o banco de dados MySQL, a linguagem de construção de scripts pré-processadora de hiper-texto (PHP), e outras linguagens de construção de scripts populares como o Python e o Perl.. Instalação O servidor web Apache2 está disponível no Ubuntu Linux. Para instalar o Apache2: # sudo apt-get install apache2# Configuração O Apache é configurado colocando-se diretivas em arquivos de configuração de texto puro. O arquivo de configuração principal é chamado apache.conf. Além disso, outros arquivos de configuração podem ser adicionados utilizando-se a diretiva Include. Qualquer diretiva pode ser colocada em qualquer desses arquivos de configuração. Mudanças no arquivo de configuração apenas são reconhecidas quando este for iniciado ou reiniciado. O servidor também irá ler um arquivo contendo os tipos mime de documentos; o nome do arquivo é definido pela diretiva TypesConfig. O arquivo de configuração do Apache2 é o /etc/apache2/apache2.conf. Pode ser configurado, número da porta, raiz dos documentos, módulos, arquivos de log, hosts virtuais, etc. Configurações Básicas O Apache é configurado com um host virtual único padrão (diretiva VirtualHost) o qual pode ser modificado ou utilizado como está, se você tiver apenas um site, ou ainda usado como modelo para hosts virtuais adicionais Roberto Amaral – Marcelo Soares Farias Página 73 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX caso tenha múltiplos sites. Se não for alterado, o host virtual padrão servirá como seu site padrão. Para modificar o virtual host padrão, edite o arquivo /etc/apache2/sites-available/default. Caso deseje configurar um novo host virtual, copie esse arquivo para o mesmo diretório com um nome de sua escolha. Por exemplo: sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/meunovosite. Edite o novo arquivo para configurar o novo site utilizando algumas das diretivas descritas abaixo. • ServerAdmin especifica o endereço de email a ser anunciado. Se website apresentar problema, o Apache2 mostrará uma mensagem de erro contendo este endereço de email para qual o problema poderá ser relatado. • Listen especifica a porta, e opcionalmente o endereço IP, na qual o Apache2 irá escutar. Se o endereço IP não for especificado, o Apache2 irá escutar em todos os endereços IP designados para a máquina no qual ele esteja rodando. O valor padrão para diretiva Listen é 80. Altere isso para 127.0.0.1:80 para fazer com que o Apache apenas escute apenas na sua interface de loopback. Esta diretiva pode ser encontrada e alterada em seu próprio arquivo, /etc/apache2/ports.conf • ServerName especifica qual a FQDN seu site deverá responder. O host virtual padrão não possui diretiva ServerName especificada, portanto ele irá responder a todas as requisições que não combinem com uma diretiva ServerName em outro host virtual. Por exemplo: para o domínio ubunturocks.com e adicione este nome na diretiva ServerName no arquivo de configuração do host virtual. Adicione esta diretiva ao novo arquivo de site virtual que você criou antes (/etc/apache2/sites-available/meunovosite). • DocumentRoot especifica o local dp s arquivos padrão que formam o site. O padrão é /var/www. Nenhum site está configurado lá, mas pode descomentar a diretiva RedirectMatch em /etc/apache2/apache2.conf as requisições serão redirecionadas para /var/www/apache2-default. Altere este valor no arquivo de host virtual do seu site e lembre-se de criar aquele diretório se necessário. O diretório /etc/apache2/sites-available não é decodificado pelo Apache2. Links simbólicos em /etc/apache2/sites-enabled apontam para sites "disponíveis" (available). Utilize o utilitário a2ensite (Apache2 EnableSite) para criar esses links simbólicos. Configuração Padrão Esta seção explica a configuração das definições padrão do servidor Apache2. • DirectoryIndex é a página padrão do servidor quando o usuário requisita um índice de um diretório especificando uma barra (/) no final do nome do diretório. Por exemplo, quando um usuário solicita a página http://www.examplo.com/este_diretório/, ele vai ver: o DirectoryIndex se ele existir; uma lista do diretório gerado pelo servidor caso não exista e as opções de índices estiverem especificadas; ou uma página de Permissão Negada se nenhuma das duas opções forem verdadeiras. Se ele não encontrar nenhum destes arquivos e se as Opções de Índices estiver ajustada para aquele diretório, o servidor irá gerar e retornar uma lista, no formato HTML, dos subdiretórios e arquivos no diretório. O valor padrão, encontrado em /etc/apache2/apache2.conf é "index.html index.cgi index.pl index.php index.xhtml". • ErrorDocument permite que você especifique um arquivo para o Apache usar para um evento específico de erro. Por exemplo, se um usuário solicitar um recurso que não existe, um erro 404 ocorrerá, e por padrão de Roberto Amaral – Marcelo Soares Farias Página 74 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX configuração do Apache, o arquivo /usr/share/apache2/error/HTTP_NOT_FOUND.html. vai será mostrado. Este arquivo não está na Raiz de Documentos do servidor, mais existe uma diretiva em /etc/apache2/apache2.conf que redireciona as requisições do diretório /error para /usr/share/apache2/error/. Para ver a listagem de diretiva padrão de Documentos de Erro, use o comando: grep ErrorDocument /etc/apache2/apache2.conf • Por padrão, o servidor registra as transferências no arquivo /var/log/apache2/access.log, conforme informado no arquivo de configuração e na diretriz CustomLog,. Pode ser especificado o arquivo onde os erros serão registrados, através da diretriz ErrorLog, que por padrão é /var/log/apache2/error.log. Estes são mantidos separados do log de transferência para permitir eliminação de problemas. Pode ser especificado o LogLevel (o valor padrão é "alertar") e o LogFormat (veja o /etc/apache2/apache2.conf para o valor padrão). • Algumas opções são especificadas num esquema por diretórios. A diretiva Option é uma dessas diretivas. Uma instância de Directory é encapsulada entre tags semelhantes ao XML, como em: <Directory /var/www/mynewsite> ... </Directory> A diretiva Options com uma instância de Directory aceita um ou mais dos seguintes valores: • ExecCGI - Permite execução de scripts CGI. Scripts CGI não são executados se esta opção não estiver habilitada. Scripts CGI devem ser mantidos em diretórios separados, fora do DocumentRoot, e somente este diretório deve ter a opção ExecCGI habilitada. O local padrão para os scripts CGI é /usr/lib/cgi-bin. • Includes - Permite inclusões no lado do servidor, permitindo que um arquivo HTML inclua outros arquivos. • IncludesNOEXEC - Permite includes, mais desabilita o comandos #exec e #include nos scripts CGI • Indexes - Mostra uma lista formatada dos conteúdos dos diretórios, caso não exista um DirectoryIndex (tal como index.html). Por motivos de segurança, não deve estar habilitado. Habilite esta opção com cuidado, somente se você tem certeza de que quer que os usuários vejam o conteúdo inteiro do diretório. • Multiview - Suporta multi-visões negociadas pelo conteúdo; esta opção é desabilitada por segurança. • SymLinksIfOwnerMatch - Segue os links simbólicos caso o arquivo seja do mesmo dono que o link. Configurações de Hosts Virtuais Hosts virtuais permitem que rode diferentes servidores para diferentes endereços IP, diferentes nomes, ou diferentes portas da mesma máquina. Por exemplo, pode rodar o website por http://www.exemplo.com.br e http://www.outroexemplo.com.br no mesmo servidor Web usando hosts virtuais. Esta opção corresponde à diretiva <VirtualHost> para o virtual host padrão e virtual hosts baseados em IP. E corresponde à diretiva <NameVirtualHost> para um virtual host baseado em nomes. As diretivas para um host virtual somente são aplicadas para um host virtual em particular. Se a diretiva é setada para escopo de servidor e não definida dentro das configurações de um virtual host, as configurações padrão serão usadas. Ajuste DocumentRoot para o diretório que contém o documento raíz para o host virtual. O DocumentRoot padrão é /var/www. A diretiva ServerAdmin dentro da instância do VirtualHost armazena o email usado no rodapé da página de erros caso você escolha mostrar um rodapé com o endereço de email na página de erro. Roberto Amaral – Marcelo Soares Farias Página 75 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Configurações do Servidor LockFile - A diretiva LockFile define o caminho do arquivo usado quando o servidor é compilado tanto com USE_FCNTL_SERIALIZED_ACCEPT quanto com USE_FLOCK_SERIALIZED_ACCEPT. PidFile - A diretiva PidFile define o arquivo em que o servidor gravará o seu ID de processo (pid). Este arquivo deve ter permissões de leitura somente para o root. Na maioria dos casos, o valor padrão deve ser deixado. User - A diretiva User seta o UserID usado pelo servidor para responder as solicitações. Esta opção determina o acesso ao servidor. Qualquer arquivo inacessível a este usuário será também inacessível aos visitantes do seu website. O valor padrão para o User é www-data. Usando o root como User você irá criar brechas de segurança para seu ser servidor Web. A diretiva Group é similar a diretiva User. Group define o grupo que o servidor irá responder as solicitações. O grupo padrão é www-data. Módulos do Apache O Apache é um servidor modular. Isso significa que somente as funcionalidades básicas são inclusas no núcleo do servidor. A extensão das funcionalidades são disponibilizadas através de módulos, que podem ser carregados no Apache. Por padrão, alguns módulos básicos já estão inclusos na hora da compilação. Se o servidor for compilado para usar o carregamento dinâmico de módulos, então os módulos podem ser compilados separadamente, e adicionados à qualquer hora usando a diretiva LoadModule. Caso contrário, o Apache2 precisa ser recompilado para adicionar ou remover módulos. As diretivas de configuração podem ser incluídas condicionalmente, com a presença de um módulo em particular incluído num bloco <IfModule>. Você pode instalar módulos adicionais do Apache2 e usá-los com o seu servidor WEB. Você pode instalar módulos do Apache2 usando o comando apt-get. Por exemplo, para instalar o módulo do Apache2 para autenticação por MYSQL, você pode executar o seguinte comando de um prompt de terminal (linha de comando). sudo apt-get install libapache2-mod-auth-mysql Quando você instala um módulo, ele estará disponível no diretório /etc/apache2/mods-available. Configurações HTTPS O módulo mod_ssl adiciona uma funcionalidade importante no servidor Apache2 – a habilidade de encriptar comunicações. Portanto, quando o seu navegador se comunica utilizando encriptação SSL, o prefixo https:// é usado no começo da URL na barra de navegação do navegador. O módulo mod_ssl está disponível no pacote apache2-common. Se você possuir este pacote instalado, você pode executar o comando a seguir de um prompt de terminal para ativar o módulo mod_ssl: sudo a2enmod ssl Certificados e Segurança Para configurar um servidor seguro, use a criptografia de chave pública para criar um par de chaves pública e privada. Na maioria dos casos, você manda o seu pedido de certificação (incluindo a sua chave pública), uma prova da identidade da sua companhia e o pagamento para uma Autoridade de Certificados (CA). A CA verifica o pedido de certificação e sua identidade, e depois manda de volta um certificado para o seu servidor seguro. Roberto Amaral – Marcelo Soares Farias Página 76 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Alternativamente, você pode criar o seu certificado auto-assinado. Note que, entretanto, o certificado autoassinado não deve ser usando na maioria dos ambientes de produção. Certificados auto-assinados não são automaticamente aceitos pelo navegador dos usuários. Os usuários são questionados pelo navegador para aceitar o certificado e criar uma conexão segura. Assim que você tiver um certificado auto-assinado ou um certificado assinado por um CA de sua escolha, você precisa instalá-lo no seu servidor seguro. Tipos de Certificados Você precisa de uma chave e um certificado para operar o seu servidor seguro, o que significa que você tanto pode gerar uma certificado auto-assinado como comprar um certificado assinado por um CA. Um certificado assinado por um CA provê duas capacidades importantes para o seu servidor: • Navegadores reconhecem o certificado e permitem uma conexão segura sem questionamentos ao usuário. • Quando um CA emite um certificado assinado, está garantindo a identidade da organização que está provendo as páginas da web para o navegador. Squid Atualmente, os servidores proxy deixaram de ser um simples privilégio e passaram a ser uma necessidade. Proxy e Cache Um proxy serve para basicamente uma coisa: tratar as requisições dos clientes nos protocolos suportados por ele, seja bloqueando URL's de sites indevidos ou controlando o acesso à WWW pelos usuários. O Squid além de um servidor proxy, também integra um sistema de caching para requisições feitas à Internet. Um servidor cache é armazena informações de requisições temporariamente em disco para uma visualização mais rápida posterior. O que é o Squid? O Squid é o servidor proxy HTTP para plataformas UNIX-Like, surgiu de um projeto entre o governo americano e a Universidade do Colorado. O Squid trabalha com os protocolos HTTP, HTTPS, FTP, Gopher e WAIS e é o proxy que possui o maior número de co-projetos. Instalando via APT Partindo do princípio que você já tenha o seu APT e seus repositórios de preferência no sources.list, você pode simplesmente rodar este comando. # apt-get install squid Roberto Amaral – Marcelo Soares Farias Página 77 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX O arquivo squid.conf O arquivo squid.conf é o principal arquivo de configuração do Squid. Zela pela simplicidade das tags, mas não muito pelo tamanho, possuindo cerca de 2 mil linhas. Antes de mexer no arquivo, é recomendável que faça um backup do arquivo original, em caso quaisquer problemas: # cp /etc/squid/squid.conf /etc/squid/squid.conf.defaults Algumas das tags mais importantes Um proxy que apenas sejam configuradas estas tags ainda não é um proxy funcional. http_port Padrão: http_port 3128 - Define a porta em que o serviço Squid irá escutar por requisições. cache_mem Padrão: cache_mem 8M - Este parâmetro configura a quantidade de memória utilizada para cache e objetos em trânsito, e não a quantidade de memória reservada para o Squid. cache_dir Padrão: cache_dir ufs /var/spool/squid 100 16 256 - Nesta opção são configurados os números de diretórios, subdiretórios e tamanho do cache. onde: • cache_dir - Nome da tag; • ufs - É a forma de armazenamento de cache. Existe também a opção aufs, mas que só está disponível para outras plataformas. Para mais informações, leia o squid.conf; • /var/spool/squid - Diretório onde o cache do Squid ficará; • 100 - Espaço em disco que o cache do Squid poderá ocupar, contado em MB; • 16 - Quantidade de diretórios que o cache do Squid possuirá; • 256 - Quantidade de subdiretórios que o cache do Squid possuirá; cache_access_log Padrão: cache_access_log /var/log/squid/access.log - Define o arquivo de log de acessos do Squid. Caso queira saber quem acessou determinada página da internet, é através deste arquivo que descobrirá. cache_mgr Padrão: cache_mgr email - Este parâmetro tem a finalidade de especificar o e-mail do administrador do proxy. Roberto Amaral – Marcelo Soares Farias Página 78 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX cache_effective_user Padrão: cache_effective_user squid - Informa ao Squid com qual nome de usuário ele deve rodar. cache_effective_group Padrão: cache_effective_group squid - Tem a mesma função da tag acima, mas trabalhar com com o grupo. visible_hostname Padrão: visible_hostname none - Define o hostname que fica visível nas mensagens de erro do Squid apresentadas para os clientes e caso não seja setada, o Squid não starta. Por isso coloque alguma coisa parecida com isto: visible_hostname squid.seudominio.com.br Access Control Lists (ACL's) Uma ACL nada mais é do que a ferramenta que o Squid utiliza para especificar quem pode quem não pode, o quê pode e o que não pode. Tipos de ACL's Src : Endereço IP de origem. Especifica um determinado host ou uma determinada rede de origem. Dst : Endereço IP de destino. Especifica um determinado host ou uma determinada rede de destino. Dstdomain : Domínio de destino. Restringe o acesso à um determinado ou para identificar um domínio de destino. time : Hora e dia da semana. Especifica um determinado horário. Port : Número da porta de destino, usado para especificar acesso à determinada porta de um servidor. url_regex : Compara uma string à uma URL inteira. Muito utilizado para fazer o bloqueio de sites indevidos. urlpath_regex : Tem uma função semelhante à anterior, porém procura apenas em pedaços do caminho da URL. Muito utilizado para bloquear extensões. proto: Especifica um protocolo de transferência. proxy_auth: Somente utilizada caso esteja utilizando autenticação. Serve para especificar nomes de usuários. Definindo ACL's Dentro do arquivo de configuração do Squid, o squid.conf, encontra-se uma área que é ideal para declarar as ACL's, onde começam a ser definidas, facilmente identificada. Para declarar ACL's, a sintaxe básica: acl <nome da acl> <tipo da acl> <string>|"<endereço de arquivo>" Um exemplo prático de ACL: acl palavra_proibida url_regex -i sexo A ACL acima bloqueia todos os sites que contenham em seu endereço a palavra "sexo". A tag http_access É inútil o uso de ACL's sem o uso da tag http_access. Esta trava ou libera o que a ACL está estipulando. Roberto Amaral – Marcelo Soares Farias Página 79 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Exemplo: http_access deny proibido Se nós considerarmos o conjunto ACL + http_access, ficaria: acl proibido url_regex -i sexo http_access deny proibido O que o conjunto acima proibi qualquer site que possua em seu endereço a palavra "sexo". Ordem das ACL's • 1 - O Squid vai ler todas as ACL's e testar se todas as ACL's declaradas possuem uma sintaxe correta e se elas estão sendo referenciadas por algum http_access; • 2 - Depois disso, se ele iniciar normalmente, irá começar a testar todas as requisições que são feitas e tentar casar as mesmas com as regras que as ACL's estipulam em conjunto com os http_access; • 3 - Caso uma URL case com uma ACL, ele ignorará todas as outras ACL's para aquela requisição. Uma outra maneira mais prática de tentar implementar isso é fazer da seguinte maneira: • 1 - Coloque as ACL's que estipulam uma exceção à alguma regra de bloqueio que virá à seguir; • 2 - Depois coloque as suas ACL's que vão bloquear sites e tudo o mais; • 3 - Só então você coloca as suas ACL's liberando o acesso. Casos Alguns casos e alguns modos principais para configurar o Squid. Habilitando o Squid Para botar o Squid para rodar, basta encontrar a linha: http_access deny all Para: http_access allow all E depois reinicie o serviço: # /etc/init.d/squid restart Restringindo o acesso ao Squid Quando encontrar a linha http_access allow all, ela vai estar liberando acesso à todos os hosts, já que a ACL "all" está especificando todos os hosts. Para arrumar isto, você deve encontrar e comentar as linhas: acl all src 0.0.0.0/0.0.0.0 Roberto Amaral – Marcelo Soares Farias Página 80 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX http_access allow all Agora crie uma nova ACL do tipo "src", especificando a rede interna: acl redeinterna src 192.168.0.0/24 Agora autorize a ACL que acabou de criar por meio de um http_access: http_access allow redeinterna Como visto acima, estamos somente permitindo o uso ao proxy pela rede interna. Agora, caso queira especificar uma range de IP's, faça assim: acl faixa_adm src 192.168.0.10-192.168.0.50 http_access allow faixa_adm Bloqueando sites indevidos no proxy O tipo de ACL url_regex serve para comparar termos dentro de uma URL para saber se esta palavra está ou não liberada e se os usuários vão ou não, visualizar a página. Utilizado para bloquear sites, Exemplo: Adicione a seguinte ACL: acl palavra url_regex -i sex Agora bloqueie o acesso com o http_access: http_access deny palavra Com este exemplo, todos os sites que possuam a palavra "sex" não serão visualizados pelos usuários. O parâmetro "-i" serve para que o Squid não distingua entre maiúsculas ou minúsculas. Porém neste momento você deve estar pensando que não é prático definir uma ACL para cada palavra que você deseje bloquear. E realmente não é. Por isso nós vamos declarar listas inteiras de palavras negadas. Eis o exemplo: Primeiro nós vamos criar o arquivo texto que nos vai servir como lista de palavras bloqueadas e damos à ela permissões de leitura: # touch /etc/squid/lists/blocked # chmod 755 /etc/squid/lists/blocked Nele insira todas as palavras proibidas. Lembre-se que você deve adicionar uma palavra por linha. Após isto, nós criamos a ACL da seguinte maneira: acl blocked url_regex -i "/etc/squid/lists/blocked" E bloqueamos o acesso com o http_access: http_access deny blocked Feito isto, todos os sites que contém em seu endereço palavras como "sex", "sexo", "sexologia" serão bloqueados, porém nem todos os sites que contém a palavra "sex" é um site pornográfico. Para distinguir os sites que podem ser liberados dos que não podem, crie uma outra lista para as exceções como "sexologia". Vamos seguir o mesmo procedimento. Criamos uma lista também para as palavras não bloqueadas. # touch /etc/squid/lists/unblocked Roberto Amaral – Marcelo Soares Farias Página 81 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX # chmod 755 /etc/squid/lists/unblocked Nesta lista coloque todos os sites que são exceções à regra, como "www.sexologia.org", um site por linha, ou palavras somente. Depois junte as duas ACL's em um único http_access, desta maneira: http_access deny blocked !unblocked Note a utilização do sinal de exclamação, significando uma inversão no sentido da regra. Pronto, o procedimento está feito. Agora tudo o que você deve fazer é reiniciar o serviço do Squid: # /etc/init.d/squid restart Restringindo o horário de acesso Aqui é o controle que pode ser criado para controle por horário. Para fazer isto, deve ser feito o uso da ACL do tipo time. Exemplo: acl horariopermitido time MTWHF 08:00-18:00 http_access deny !horariopermitido O sinal de exclamação inverte o sentido da regra, negando o uso do proxy em todos os horários, COM EXCESSÃO do horário especificado na ACL horário permitido. As letras "MTWHF" na frente da ACL, especificam os dias da semana conforme esta tabela: S - Sunday (Domingo), M - Monday (Segunda), T Tuesday (Terça), W - Wednesday (Quarta), H - Thursday (Quinta), F - Friday (Sexta), A - Saturday (Sábado). O chefe... O seu chefe adora proibir as coisas para os usuários mortais, mas ele quer ter o controle completo. Para contornar a situação, faça o seguinte: acl chefidap src 192.168.1.23 E permitir a lista de palavras negadas para ele, assim: http_access allow blocked chefidap Uma outra maneira de se fazer ambos os bloqueios é definir o IP/login do seu chefe em uma ACL e na hora em que for declarar o http_access, definir acima das ACL's de bloqueio, assim: http_access allow chefidap http_access deny blocked !unblocked Só site liberado Ao invés de especificar os sites negados, especifique o site que vai poder acessar. Primeiramente, especifique os sites que irão poder acessar: acl bancos url_regex -i "/etc/squid/lists/bancos" Adicione os endereços dos bancos na lista e especifique também o IP do computador do usuário: acl peao src 192.168.1.24 Então junte os dois em um único http_access, desta maneira: http_access deny !bancos peao Roberto Amaral – Marcelo Soares Farias Página 82 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Interpretando a regra, fica: Vamos bloquear todos os sites, COM EXCESSÃO DOS SITES ESPECIFICADOS NA LISTA DE BANCOS para o IP 192.168.1.24. Bloqueando MSN Bem, aqui está um problema pelo qual alguns administradores possam ter dificuldades. O MSN a partir da versão 6.x (in)felizmente passou a fazer conexões utilizando tunneling por http. Ou seja: Ele se conecta pela porta 80 também! O bloqueio do Squid é simples de ser feito, bastando adicionar o termo "gateway.dll" na sua lista de palavras negadas. Bloqueando extensões e downloads de determinados Você pode bloquear extensões que os usuários baixam no computador por meio de HTTP ou de FTP e de quaisquer outros protocolos que o Squid suporte, fazendo os seguintes passos: Primeiramente, você deve criar a velha listinha e setar as permissões corretas: # touch /etc/squid/lists/extensoes # chmod 755 /etc/squid/lists/extensoes Feito isto, deve escrever as extensões que deseja bloquear da seguinte maneira no arquivo: \.mp3$ \.wav$ \.pif$ \.bat$ NOTA: O "\" é um eliminador de metacaracteres e serve para cancelar a função do ".". Já o "$" serve para que seja analizado até o final de string. Agora vamos adicionar a ACL no Squid que vai bloquear as extensões efetivamente, juntamente com o seu http_access: acl extensoes urlpath_regex -i "/etc/squid/lists/extensoes" http_access deny extensoes Note que ao invés do url_regex, eu utilizei o urlpath_regex. Segurança em um servidor Squid Todo servidor, independente de plataforma ou serviço que executa, precisa de certas configurações de segurança, para não sofrer ataques. Os principais erros de segurança na configuração do Squid: Erro I: Definição de relay do servidor Squid Assim como a maioria dos servidores, o Squid também possui suas configurações de relay. Entenda por relay o "lado para qual o servidor está rodando, se é para a internet ou para a rede interna". Claro que é Roberto Amaral – Marcelo Soares Farias Página 83 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX interessante que monte um servidor para a sua rede interna. Sendo assim, deveria se preocupar com o relay do servidor Squid, pois geralmente os usuários costumam disfarçar seus IP's utilizando servidores proxy abertos pela Internet, prática conhecida como IP Spoofing. Você pode detectar se existe alguém utilizando o seu proxy de duas maneiras: A primeira é deixar o seu servidor rodando e tirar o log de 1 dia.. Com certeza algo aparecerá, seja um endereço IP que não é da rede interna ou um endereço de host totalmente nada a ver. A segunda é monitorar a ações do seu proxy com o "tail", em tempo real. Por outro lado, temos também duas maneiras de resolver este problema. 1ª Maneira: http_port Você pode editar esta tag para que o Squid só escute requisições vindas da rede interna, desta maneira: Troque o valor-padrão da tag: http_port 3128 Para: http_port 192.168.1.1:3128 Se você resolver por aqui, o seu problema com relay morreu. Eu prefiro esta maneira por ser mais prática e por não ter que ficar mexendo com ACL's e se algum dia um abelhudo passar um portscanner na sua máquina, como o nmap, ele não irá apresentar o serviço Squid rodando. 2ª Maneira: acl all src 192.168.0.0/24 Você pode permitir o http_port como mencionado acima, mas deverá definir a sua rede interna quando for utilizar as suas ACL's, desta maneira: Troque a ACL all de: acl all src 0.0.0.0/0 Para: acl all src 192.168.0.0/24 (O Squid somente irá permitir conexões vindas da rede interna.) Erro II: http_access deny all Coloque esta linha no final das declarações das suas ACL's. O motivo disto é que se o Squid não encontra uma ocasião pela qual encaixar uma ACL, ele simplesmente libera a sua utilização. Erro III: Usuários Geralmente usuários removem as configurações de proxy do navegador para navegarem sem restrições e somente pelo NAT ou procuram por proxies abertos na Internet e configuram os navegadores para utilizarem estes endereços ou ainda vão em páginas como o "anonymizer" ou similares e navegam por lá. Por isto, é importante bloquear de tais páginas. Roberto Amaral – Marcelo Soares Farias Página 84 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Erro IV - Proxy Transparente sem ser no gateway da rede Também é comum receber e-mails de pessoas perguntando como fazer isso. Não é uma idéia muito segura, a menos que você possua uma DMZ. Isso porque os usuários podem alterar as configurações de rede e fazer com que o gateway da rede aponte para o roteador final, fazendo um caminho alternativo para os pacotes e fazendo com que os mesmos não passem pelo servidor Squid. Criando um script de relatório simples Para a criação de um shell-script que gere o relatório que pegue as últimas requisições negadas pelo proxy, devemos criar um arquivo em branco:# touch /usr/bin/squidreport Com o conteúdo abaixo: #!/bin/bash cat /var/log/squid.log | grep DENIED | tail -n 60 | mail root Mude as permissões do arquivo para: # chmod 700 relatoriosquid.sh E agende o relatório para ser gerado dentro do CRON, com a seguinte linha: # crontab -e 30 21 * * * squidreport Pronto! Todos os dias às nove e meia da noite, será gerado o relatório de acessos negados pelo Squid e eles vão estar dentro da caixa de e-mails do administrador do sistema. NFS O que é NFS? O Network File System (NFS) foi desenvolvido para permitir que se possam montar partições ou diretórios remotos como se fosse um disco local, garantindo especificar diferentes permissões de acesso a cada cliente de acesso ao compartilhamento. Servidor Instalação # apt-get install nfs-user-server nfs-common statd portmap Configurando o Servidor NFS Para começar a configurar o serviço, deve entrar no sistema como root e criar um diretório /Compartilhado, como default desse documento, ou se preferir escolha outro local ou outro nome de diretório a ser compartilhado. Editar o arquivo /etc/exports para definir a pasta a ser compartilhada e permissões de acesso. A linha abaixo, por exemplo, dá acesso diretório "Compartilhado" para o IP 192.168.0.2 com direitos de leitura, escrita e execução. /Compartilhado 192.168.0.2/255.255.255.0(rw,no_root_squash,sync) Roberto Amaral – Marcelo Soares Farias Página 85 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Onde: rw (escrita e leitura), no_root_squash (privilégios de superusuário), sync (não permite que o servidor responda a pedidos antes que as alterações feitas pelo pedido sejam salvas no disco.) O padrão de construção da linha de permissões de acesso ao compartilhamento, está abaixo: Diretório host1(opção11, opção12) host2(opção21, opção22) Diretório: Diretório a ser compartilhado (ex. /home/fabio/). HostN: IP do pc cliente do compartilhamento. OpçãoXY: Permissões de acesso ao compartilhamento Editar o arquivo /etc/hosts.deny para definir a segurança do compartilhamento. nserir as seguintes linhas: portmap: ALL lockd: ALL mountd: ALL rquotad: ALL Editar o arquivo /etc/hosts.allow para definir o IP ou faixa de IPs que poderão "concorrer" aos compartilhamentos, ou seja, especifica quem terá acesso a cada serviço. Inserir as seguintes linhas para permitir que toda a rede 192.168.0.0/24 tenha direito serviços especificados. portmap: 192.168.0.0/24 lockd: 192.168.0.0/24 rquotad: 192.168.0.0/24 mountd: 192.168.0.0/24 statd: 192.168.0.0/24 No exemplo é especificado uma faixa de IPs, mas pode definir os hosts separadamente dentro do padrão abaixo: serviço: host1, host2, host3, hostX Executar os seguintes comandos: /etc/init.d/portmap restart /etc/init.d/nfs-user-server restart /etc/init.d/nfs-common restart rpc.montd rpc.nfsd rpc.statd rpc.lockd Roberto Amaral – Marcelo Soares Farias Página 86 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Cliente Instalação # apt-get install nfs-common statd portmap Editar o arquivo /etc/hosts.deny para definir a segurança do compartilhamento. Inserir as seguintes linhas: portmap: ALL lockd: ALL mountd: ALL rquotad: ALL Executar os seguintes comandos: /etc/init.d/portmap restart rpc.statd rpc.lockd mount -t nfs 192.168.1.115(end do servidor):/Compartilhado /diretorio/local Se você acha muito incômodo ter que repetir essa linha de comando enorme, adicione essa linha ao fstab: : /Compartilhado /diretorio/local nfs defaults,noauto 0 0 Feito isso a montagem fica bem mais simples, basta digitar: # mount /diretorio/local Ssh O SSH permite administrar máquinas remotamente, permite transferir arquivos de várias formas diferentes e, como se não bastasse, permite também encapsular outros protocolos. A grande vantagem do SSH sobre outras ferramentas de acesso remoto é a grande ênfase na segurança. Um servidor SSH bem configurado é virtualmente impenetrável. O SSH é dividido em dois módulos. O sshd é o módulo servidor, um serviço que fica residente na máquina que será acessada, enquanto o ssh é o módulo cliente, um utilitário que você utiliza para acessá-lo. No Debian, ambos são instalados através do pacote "ssh". Instalação O padrão do Debian é já trazer o ssh instalado. Caso seja necessário instalar, use:#apt-get install ssh Iniciando o servidor ssh. Com o pacote instalado, você inicia o servidor usando o comando:/etc/init.d/ssh start Para que ele seja inicializado durante o boot, use o comando: update-rc.d -f ssh defaults A configuração do servidor, vai no arquivo /etc/ssh/sshd_config, enquanto a configuração do cliente vai no /etc/ssh/ssh_config. Note que muda apenas um "d" entre os dois. No Debian o servidor só funcionará se o arquivo sshd_not_to_be_run, presente em /etc/ssh for renomeado ou excluído. Renomeando o arquivo: mv /etc/ssh/sshd_not_to_be_run /etc/sshd_not_to_be_run.old Roberto Amaral – Marcelo Soares Farias Página 87 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Configuração do servidor O SSH tem dois protocolos de autenticação: • protocolo SSH versão 1: – métodos de autenticação disponíveis: * RSAAuthentication: autenticação de usuário baseado em chave de identidadeRSA * RhostsAuthentication: autenticação de máquina baseado em .rhosts (inseguro, desabilitado) * RhostsRSAAuthentication: autenticação .rhosts combinada com chave de máquina RSA * ChallengeResponseAuthentication: autenticação pergunta-resposta RSA * PasswordAuthentication: autenticação baseada em senha • protocolo SSH versão 2: – métodos de autenticação disponíveis: * PubkeyAuthentication: autenticação de usuário baseado em chave pública * HostbasedAuthentication: autenticação .rhosts ou /etc/hosts.equiv combinado com autenticação de chave pública de máquina cliente (desabilitado) * ChallengeResponseAuthentication: autenticação pergunta-resposta * PasswordAuthentication: autenticação baseada em senha Você pode configurar várias opções relacionadas ao servidor SSH, incluindo a porta TCP a ser usada editando o arquivo "/etc/ssh/sshd_config". A maior parte das opções dentro do arquivo podem ser omitidas, pois o servidor simplesmente utiliza valores padrão para as opções que não constarem no arquivo. - Porta: Uma das primeiras linhas é a: Port 22 Esta é a porta que será usada pelo servidor SSH. O padrão é usar a porta 22. Ao mudar a porta do servidor aqui, você deverá usar a opção "-p" ao conectar a partir dos clientes, para indicar a porta usada, como em: # ssh -p 2222 [email protected] Outra opção é editar o arquivo "/etc/ssh/ssh_config" (nos clientes) e alterar a porta padrão. Mudar a porta padrão do SSH é uma boa idéia se você está preocupado com a segurança. Muitos dos ataques "casuais", quando não existe um alvo definido, começam com um portscan genérico, feito em faixas inteiras de endereços IP, mas apenas em algumas portas conhecidas, como a 21, 22 e 80. A partir daí, os ataques vão sendo refinados e direcionados apenas para os servidores vulneráveis encontrados na primeira varredura. Colocar seu servidor numa porta mais escondida, já dificulta um pouco as coisas. Controle de acesso: Logo abaixo vem a opção "ListenAddress", que permite limitar o SSH a uma única placa de rede (mesmo sem usar firewall), em casos de micros com duas ou mais placas. O típico caso onde você quer que o SSH fique acessível apenas na rede local, mas não na internet, por exemplo. Digamos que o Roberto Amaral – Marcelo Soares Farias Página 88 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX servidor use o endereço "192.168.0.1" na rede local e você quer que o servidor SSH não fique disponível na Internet. adicionaria a linha: ListenAddress 192.168.0.1 Note que especificamos nesta opção o próprio IP do servidor na interface escolhida, não a faixa de IP's da rede local ou os endereços que terão acesso a ele. Protocolo: Atualmente utilizamos o SSH 2, mas ainda existem alguns poucos clientes que utilizam a primeira versão do protocolo. Por padrão, o servidor SSH aceita conexões de clientes que utilizam qualquer um dos dois protocolos, o que é indicado na linha: Protocol 2,1 O protocolo SSH 1 tem alguns problemas fundamentais de segurança, por isso alguns administradores preferem desabilitar a compatibilidade com ele, aceitando apenas clientes que usam o SSH 2. Neste caso, a linha fica apenas "Protocol 2" - Usuários e senhas: Outra opção interessante, logo abaixo é a: PermitRootLogin yes Esta opção determina se o servidor aceitará que usuários se loguem como root. Do ponto de vista da segurança, é melhor deixar esta opção como "no", pois assim o usuário precisará primeiro se logar usando um login normal e depois virar root usando o "su" ou "su -". Por padrão, o SSH permite que qualquer usuário cadastrado no sistema logue-se remotamente, mas você pode refinar isso através da opção "AllowUsers", que especifica uma lista de usuários que podem usar o SSH. Quem não estiver na lista, continua usando o sistema localmente, mas não consegue se logar via SSH. Isso evita que contas com senhas fracas, usadas por usuários que não tem necessidade de acessar o servidor remotamente coloquem a segurança do sistema em risco. Para permitir que apenas os usuários tico e teco possam usar o SSH, adicione a linha: AllowUsers tico teco. Você pode ainda inverter a lógica, usando a opção "DenyUsers". Neste caso, todos os usuários cadastrados no sistema podem fazer login, com exceção dos especificados na linha, como em: DenyUsers joaquim ricardao Outra opção relacionada à segurança é a: PermitEmptyPasswords no Esta opção faz com que qualquer conta sem senha fique automaticamente desativada no SSH, evitando que alguém consiga se conectar ao servidor "por acaso" ao descobrir a conta desprotegida. Lembre-se que a senha é justamente o ponto fraco do SSH. De nada adianta usar 2048 bits de encriptação se o usuário escreve a senha num post-it colado no monitor, ou deixa a senha em branco. - Banner: Alguns servidores exibem mensagens de advertência antes do prompt de login, avisando que todas as tentativas de acesso estão sendo monitoradas ou coisas do gênero. A mensagem é especificada através da opção "Banner", onde você indica um arquivo de texto com o conteúdo a ser mostrado, como em: Roberto Amaral – Marcelo Soares Farias Página 89 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Banner = /etc/ssh/banner.txt - X11 Forwarding: Um pouco depois temos a opção: X11Forwarding yes Esta opção determina se o servidor permitirá que os clientes executem aplicativos gráficos remotamente. Se o servidor será acessado via internet ou se possui um link lento, você pode deixar esta opção como "no" para economizar banda. Desta forma, os clientes poderão executar apenas comandos e aplicativos de modo texto. - Módulos: O SSH inclui um módulo de transferência de arquivos (o SFTP). Ele é ativado através da linha: Subsystem sftp /usr/lib/sftp-server É realmente necessário que esta linha esteja presente para que o SFTP funcione. Comente esta linha apenas se você realmente quiser desativá-lo. Para que as alterações entrem em vigor, reinicie o servidor SSH: # /etc/init.d/ssh restart Transferindo arquivos Além de permitir rodar aplicativos e fazer toda a administração de um servidor remotamente, o ssh também pode ser usado para transferir arquivos. Uma forma primitiva de transferir arquivos via SSH é usar o "scp", que permite especificar numa única linha o login e endereço do servidor, junto com o arquivo que será transferido. Graças a isso, ele é muito usado em scripts. A sintaxe do scp é: scp arquivo_local login@servidor:pasta_remota como em: $ scp /home/arquivo.tar [email protected]:/var/www/download Você pode adicionar também as opções "-p" (que preserva as permissões de acesso além das datas de criação e modificação do arquivo original), "-r" (que permite copiar pastas, recursivamente), "-v" (verbose, onde são mostradas todas as mensagens) e "-C" (que ativa a compressão dos dados, ajuda muito na hora de transferir grandes arquivos via internet). Neste caso o comando ficaria: $ scp -prvC /home/arquivo.tar [email protected]:/var/www/download Ao incluir a opção "-r", você pode especificar diretamente uma pasta no primeiro parâmetro. Roberto Amaral – Marcelo Soares Farias Página 90 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Outra forma mais básica de fazer isso é usar o sftp, um comando que faz parte do pacote padrão. Ele oferece uma interface similar à dos antigos programas de FTP de modo texto, mas todos os arquivos transferidos através dele trafegam através de um túnel encriptado, criado através do SSH. Na prática, temos uma espécie de VPN temporária, criada no momento em que é efetuada a conexão. A melhor parte é que o próprio SSH cuida de tudo, não é necessário instalar nenhum programa adicional. Para se conectar a um servidor usando o sftp, o comando é: $ sftp [email protected] Se o servidor ssh na outra ponta estiver configurado para escutar numa porta diferente da 22, é preciso indicar a porta no comando, incluindo o parâmetro -o port=, como em: $ sftp -o port=22 [email protected] A partir daí você tem um prompt do sftp. Use o comando "put" para dar upload de um arquivo e "get" para baixar um arquivo do servidor para a pasta local. Para navegar entre as pastas do servidor, use os comandos "cd pasta/" (para acessar a pasta), "cd .." (para subir um diretório), "ls" (para listar os arquivos) e "pwd" (para ver em qual diretório está). Exemplo: user@athenas:~$ sftp -o port=2222 [email protected] Connecting to XX.XX.XX.XX... Password: sftp> ls Desktop Meu Computador OpenOffice.org1.1.1a bkp060901 sftp> get bkp060901 Fetching /home/user/bkp060901 to bkp060901 /home/user/bkp060901 100% 825KB 825.1KB/s 00:01 sftp> put RealPlayer10GOLD.bin Uploading RealPlayer10GOLD.bin to /home/user/RealPlayer10GOLD.bin RealPlayer10GOLD.bin 100% 6726KB 3.3MB/s 00:02 sftp> pwd Remote working directory: /home/user Existem ainda os comandos: lcd #(local cd) lls #(local ls) lmkdir #(local mkdir) lpwd #(local pwd) Por exemplo, digamos que você está atualmente no diretório /mnt/arquivos. Ao abrir a conexão via sftp, tudo que você baixar será colocado automaticamente neste diretório. Mas, digamos que você queira baixar um determinado arquivo para o diretório /home/tico. Você usaria então o comando lcd /home/tico Roberto Amaral – Marcelo Soares Farias Página 91 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX para mudar o diretório local e depois o get arquivo para baixá-lo já na pasta correta. Na hora de dar upload de um arquivo é a mesma coisa. Você pode usar o "lpwd" para listar os arquivos no diretório local e depois o "put arquivo" para dar upload. Telnet O serviço telnet é oferece o login remoto em seu computador, que permite trabalhar conectado a distância como se estivesse em frente a ele. Ele substitui o rlogin e possui muitas melhorias em relação a ele, como o controle de acesso, personalização de seção e controle de terminal. Atualmente possui tanto a versão original (insegura), quanto uma versão mais segura com suporte a ssl. Pacotes: telnet Cliente telnet com suporte a autenticação. telnetd Servidor telnet com suporte a autenticação. telnet-ssl Cliente telnet com suporte a autenticação e ssl. Também suporta conexão a servidores telnet padrão quando o servidor não suporta ssl. Por padrão é tentada a conexão usando ssl, se esta falhar será assumida a transmissão em texto plano. Telnetd-ssl Servidor telnet com suporte a autenticação e ssl. Também suporta conexão de clientes telnet padrão (sem suporte a ssl). Utilitários: in.telnetd Servidor telnet telnet Cliente telnet padrão (quando o pacote telnetssl está instalado, é simplesmente um link para telnetssl). telnet-ssl Cliente telnet com suporte a ssl. Instalação apt-get install telnet telnetd ou apt-get install telnet-ssl telnetd-ssl Os pacotes com o ssl no final possuem suporte a criptografia ssl. Por padrão a porta usada para executar o serviço telnet é a 23 (ou outro número de porta definido no /etc/services). A instalação do servidor telnet é feita via inetd (no arquivo /etc/inetd.conf) e o controle de acesso ao serviço é feito através dos arquivos /etc/hosts.allow e /etc/hosts.deny. O servidor tem o nome in.telnetd e este deverá ser usado para ajustar o controle de acesso nos arquivos acima. Roberto Amaral – Marcelo Soares Farias Página 92 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Iniciando o servidor/reiniciando/recarregando a configuração O arquivo que controla o funcionamento do servidor telnet é o /etc/inetd.conf e o controle de acesso sendo feito pelos arquivos /etc/hosts.allow e /etc/hosts.deny. Será necessário reiniciar o servidor inetd caso algum destes três arquivos seja modificado: killall HUP inetd A porta de operação padrão é a 23 e pode ser modificada no arquivo /etc/services. Opções de linha de comando do servidor telnetd: -D nível_de_depuração Permite especificar o que será registrado pelo servidor durante a conexão dos clientes telnet. As seguintes opções são suportadas: options Mostra detalhes sobre a negociação das opções de conexão. report Mostra detalhe de opções e o que está sendo feito. netdata Mostra os dados transferidos na conexão telnetd. ptydata Mostra os dados mostrados na pty. -edebug Ativa a depuração do código de criptografia apenas para o servidor telnet com suporte a ssl. -h Somente mostra os detalhes de configuração do seu PC após o usuário fornecer um nome/senha válidos. -L [programa] Utiliza o programa especificado para fazer o login do usuário (/usr/sbin/telnetlogin é o padrão). -n Não envia pacotes keep alive para verificar o estado da conexão. Desativando esta opção poderá fazer o servidor ficar rodando constantemente caso aconteça algum problema e o usuário não consiga se desconectar normalmente. -S TOS Ajusta o tipo de serviço usado na conexão para o valor especificado. Estas opções deverão ser especificadas após o servidor in.telnetd no arquivo /etc/inetd.conf. Fazendo conexões ao servidor telnet Use o comando: telnet [endereço] [porta] para realizar conexões com uma máquina rodando o servidor telnet. Adicionalmente as seguintes opções podem ser usadas: -l [usuario] Envia o nome de usuário ao computador remoto. Muito útil com o telnetssl. -E Desativa o caracter de escape Roberto Amaral – Marcelo Soares Farias Página 93 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX -a Tenta fazer o login automático usando o nome de usuário local. Se o login falhar, será solicitado o nome de usuário. Esta opção é usada por padrão com o cliente telnetssl. -r Emula o comportamento do programa rlogin. Exemplo: # Conecta-se ao servidor telnet rodando na porta 23 de sua própria máquina telnet localhost # Conecta-se ao servidor telnet 200.200.200.200 operando na porta 53454 usando o # nome de usuário john telnet –l john 200.200.200.200 53454 Roberto Amaral – Marcelo Soares Farias Página 94 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Instalação de Servidor de e-mail (usando post-fix) # apt-get install postfix # apt-get install postfix-ldap # apt-get install postfix-mysql # apt-get install postfix-pgsql Passos de Configuração: I. A primeira pergunta é sobre a função do servidor de e-mails. a. "Internet Site", cria um servidor que envia e recebe os e-mails diretamente. b. "with smarthost", servidor recebe mensagens, mas o envio fica a cargo de outra máquina. c. "Satellite system", servidor envia através de outra máquina e não recebe mensagens. d. "Local only" é usada apenas em redes de terminais leves,permite apenas que os usuários logados no servidor troquem e-mails entre si. II. Defina a conta do Administrador do Sistema de e-mail III. Insira o Domíno Registrado (neste caso use gerds+bancada.utp.br) IV. Definir os destinos que serão aceitos pelo servidor, ou seja, os endereços que colocados no destinatário da mensagem fazem ele entender que o e-mail é para ele. Use o nome da máquina, o domínio registrado, "localhost.localdomain" e "localhost", todos separados por vírgula e espaço. V. A opção "synchronous updates" permite desativar as otimizações no envio das mensagens, fazendo com que os e-mails sejam enviados conforme são recebidos e em ordem. Depois de concluída a instalação, o servidor já estará iniciado e configurado para subir automaticamente durante o boot. Testando: $ telnet seuip 25 Trying seuip Connected to seuip Escape character is '^]'. 220 debian ESMTP Postfix (Debian/GNU) HELO smtp.eu.com 250 debian MAIL From: [email protected] 250 Ok RCPT to: joao@localhost 250 Ok DATA 354 End data with <CR><LF>.<CR><LF> Vai ver se estou na esquina! . 250 Ok: queued as 8CEDB2215 QUIT 221 Bye Connection closed by foreign host. Roberto Amaral – Marcelo Soares Farias Página 95 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Instalando um Cliente em modo texto apt-get install mutt Instalando suportes Existem vários servidores pop3, como o Cyrus e o Courier. O Courier é o mais usado, pois inclui vários componentes adicionais. Ele é, na verdade, uma suíte, que inclui até mesmo um webmail. # apt-get install courier-pop # apt-get install courier-pop-ssl # apt-get install courier-imap # apt-get install courier-imap-ssl Cadastro de Usuário # adduser usuario Configurando o /etc/postfix/main.cf # /etc/postfix/main.cf myhostname = gerds(+bancada).utp.br mydomain = gerds.utp.br append_dot_mydomain = no alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = etch.gerds.utp.br, gerds.utp.br, localhost relayhost = mynetworks = 10.10.10.0/24 home_mailbox = Maildir/ mailbox_command = recipient_delimiter = + inet_interfaces = all inet_protocols = all message_size_limit = 20000000 mailbox_size_limit = 0 Roberto Amaral – Marcelo Soares Farias Página 96 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Universidade Tuiuti do Paraná – UTP Faculdade de Ciências Exatas e de Tecnologia Cursos de Computação Grupo de Estudos de Redes de Computadores e Sistemas Distribuídos AULA PRÁTICA Professores: Marcelo Soares Farias Roberto Néia Amaral Roberto Amaral – Marcelo Soares Farias Página 97 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Curitiba, 2008 HTTPD - Servidor Web Apache2 Instalação O servidor web Apache2 está disponível no Ubuntu Linux. Para instalar o Apache2: # sudo apt-get install apache2# Configuração sudo cp /etc/apache2/sites-available/default Campos: • ServerAdmin especifica o endereço de email a ser anunciado. • Listen especifica a porta, e opcionalmente o endereço IP, na qual o Apache2 irá escutar. • ServerName especifica qual a FQDN seu site deverá responder. • DocumentRoot especifica o local do s arquivos padrão que formam o site. Configuração Padrão Esta seção explica a configuração das definições padrão do servidor Apache2. • DirectoryIndex é a página padrão do servidor quando o usuário requisita um índice de um diretório. • ErrorDocument permite que especifique um arquivo para o Apache usar para um evento específico de erro. • ExecCGI - Permite execução de scripts CGI. • Includes - Permite inclusões no lado do servidor, permitindo que um arquivo HTML inclua outros arquivos. • IncludesNOEXEC - Permite includes, mais desabilita o comandos #exec e #include nos scripts CGI • Indexes - Mostra uma lista formatada dos conteúdos dos diretórios. • Multiview - Suporta multi-visões negociadas pelo conteúdo; esta opção é desabilitada por segurança. • SymLinksIfOwnerMatch - Segue os links simbólicos caso o arquivo seja do mesmo dono que o link. Roberto Amaral – Marcelo Soares Farias Página 98 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Squid Instalando via APT # apt-get install squid O arquivo squid.conf Antes de mexer no arquivo faça um backup do arquivo original: /etc/squid/squid.conf.defaults # cp /etc/squid/squid.conf Algumas das tags mais importantes Um proxy que apenas sejam configuradas estas tags ainda não é um proxy funcional. http_port Padrão: http_port 3128 - Define a porta em que o serviço Squid irá escutar por requisições. cache_mem Padrão: 8M - Quantidade de memória utilizada para cache e objetos em trânsito. cache_dir Padrão: cache_dir ufs /var/spool/squid 100 16 256 • cache_dir - Nome da tag; • ufs - É a forma de armazenamento de cache. • /var/spool/squid - Diretório onde o cache do Squid ficará; • 100 - Espaço em disco que o cache do Squid poderá ocupar, contado em MB; • 16 - Quantidade de diretórios que o cache do Squid possuirá; • 256 - Quantidade de subdiretórios que o cache do Squid possuirá; cache_access_log Padrão: cache_access_log /var/log/squid/access.log - Define o arquivo de log de acessos do Squid cache_mgr Padrão: cache_mgr email - Este parâmetro tem a finalidade de especificar o e-mail do administrador do proxy. cache_effective_user Padrão: cache_effective_user squid - Informa ao Squid com qual nome de usuário ele deve rodar. cache_effective_group Padrão: cache_effective_group squid - Tem a mesma função da tag acima, mas trabalhar com com o grupo. visible_hostname Padrão: visible_hostname none - Define o hostname que fica visível nas mensagens de erro do Squid apresentadas para os clientes e,caso não seja setada, o Squid não starta. Por isso coloque alguma coisa parecida com isto: visible_hostname squid.seudominio.com.br Roberto Amaral – Marcelo Soares Farias Página 99 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Access Control Lists (ACL's) Uma ACL nada mais é do que a ferramenta que o Squid utiliza para especificar quem pode quem não pode, o quê pode e o que não pode. Tipos de ACL's Src : Endereço IP de origem. Especifica um determinado host ou uma determinada rede de origem. Dst : Endereço IP de destino. Especifica um determinado host ou uma determinada rede de destino. Dstdomain : Domínio de destino. Restringe o acesso ou para identificar um domínio de destino. time : Hora e dia da semana. Especifica um determinado horário. Port : Número da porta de destino, usado para especificar acesso à determinada porta de um servidor. url_regex : Compara uma string à uma URL inteira. Muito utilizado para fazer o bloqueio de sites indevidos. urlpath_regex : Tem uma função semelhante à anterior, porém procura apenas em pedaços do caminho da URL. Muito utilizado para bloquear extensões. proto: Especifica um protocolo de transferência. proxy_auth: Somente utilizada caso esteja utilizando autenticação. Serve para especificar nomes de usuários. Definindo ACL's Em squid.conf, declarar ACL's, a sintaxe básica: acl <nome da acl> <tipo da acl> <string>|"<endereço de arquivo>" Um exemplo prático de ACL: acl palavra_proibida url_regex -i sexo A tag http_access É inútil o uso de ACL's sem o uso da tag http_access. Esta trava ou libera o que a ACL está estipulando. Exemplo: http_access deny proibido Exemplo: acl proibido url_regex -i sexo http_access deny proibido Ordem das ACL's • 1 - O Squid vai ler todas as ACL's e testar se possuem uma sintaxe correta; • 2 - Testa todas as requisições que são feitas e casa com as regras; • 3 - Caso uma URL case com uma ACL, ele ignorará todas as outras ACL's para aquela requisição. Uma outra maneira mais prática de tentar implementar isso é fazer da seguinte maneira: • 1 - Coloque as ACL's que estipulam uma exceção à alguma regra de bloqueio que virá à seguir; • 2 - Depois coloque as suas ACL's que vão bloquear sites e tudo o mais; • 3 - Só então você coloca as suas ACL's liberando o acesso. Habilitando o Squid Para botar o Squid para rodar, basta encontrar a linha: http_access deny all Para: http_access allow all / E depois reinicie o serviço: # /etc/init.d/squid restart netfilter As tabelas do iptables são: • filter: é a tabela padrão, sobre a qual podemos nos referir a três correntes de regras, ou chains: Roberto Amaral – Marcelo Soares Farias Página 100 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX • INPUT, pacotes que entram na interface; • OUTPUT, pacotes que saem da interface • FORWARD, pacotes que estão sendo roteados de uma interface para outra; • nat: esta tabela se refere ao uso do recurso de Network Address Translation ou NAT, na qual podemos nos referir aos chains: PREROUTING, pacotes que serão alterados antes de roteamento; OUTPUT, pacotes locais que serão alterados antes do roteamento e POSTROUTING, pacotes que serão alterados após a aplicação das regras de roteamento; • mangle: usada para alterações especiais no pacote, PREROUTING, para alteração antes do roteamento e OUTPUT, pacotes locais que serão alterados antes do roteamento. Dentre as ações que são feitas sobre os pacotes que atendem a um determinado chain em uma dada tabela: • ACCEPT: aceita o pacote; • DROP: rejeita o pacote; • MASQUERADE: atua somente sobre a tabela nat e indica que será efetuado a conversão de endereços ou NAT, conforme indicado no comando. Compartilhando Conexão com IPTABLE modprobe iptable_nat iptables -t nat -A POSTROUTING -o INTERFACE -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward MRTG MRTG coleta informações em base de script para criar relatórios que podem ser visualizados o estado de um roteador, servidor ou link em determinados tempos. Servidor (script – Monitoração HD) Servidor (script – Monitor HD e Memória) #chmod +x /etc/mrtg/mrtg-hd.sh #chmod +x /etc/mrtg/mrtg-cpu.sh if [ -e $1 ] then printf "parametro ausente\n" unset LANG else mem=$(/usr/bin/free|grep ^-) total=`df | grep $1 | awk '{print $2}' 2>> /dev/null` load=$(cat /proc/loadavg) livre=`df | grep $1 | awk '{print $3}' 2>> /dev/null` awk -v load="$load" -v mem="$mem" ' ocupado=`df | grep $1 | awk '{print $4}' 2>> BEGIN { /dev/null` split(load,loadstats) percent_oc=$(($ocupado * 100 / $total)) print int(100*loadstats[2]) percent_li=$((100 - $percent_oc)) split(mem,memstats); echo "$percent_oc" print int(100*memstats[3]/(memstats[3]+\ echo "$percent_li" fi Roberto Amaral – Marcelo Soares Farias memstats[4])); }' Página 101 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Servidor (script) – Configuração do mrtg.cfg WorkDir: /usr/local/apache/htdocs/mrtg/ Language: brazilian RunAsDaemon: yes Interval: 5 Target[hdboot]:`/etc/mrtg/mrtg-hd.sh hdb1 2>> /dev/null` Title[hdboot]:"Uso do HD do Sistema" PageTop[hdboot]:<h1>Uso do HD do Sistema</h1> Options[hdboot]: growright,noinfo,gauge YLegend[hdboot]: Percentual ShortLegend[hdboot]: % MaxBytes[hdboot]: 100 Legend1[hdboot]: espaco livre Legend2[hdboot]: espaco ocupado LegendI[hdboot]: Livre LegendO[hdboot]: Ocupado Target[eth0]: `/etc/mrtg/mrtgstats-net.sh eth0` Title[eth0]:"Trafego na placa de rede - eth0" MaxBytes[eth0]:1400000 PageTop[eth0]: <h1>Trafego de dados na placa de rede</h1> Options[eth0]: growright,bits,noinfo Target[perf]:`/etc/mrtg/mrtg-cpu.sh` Title[perf]:"Carga da CPU e Uso da Mem" PageTop[perf]:<h1>Carga da CPU e Uso da Mem</h1> Options[perf]: growright,noinfo,gauge YLegend[perf]: Percentual ShortLegend[perf]: % MaxBytes[perf]: 100 Legend1[perf]: Carga da CPU Legend2[perf]: Uso da mem real LegendI[perf]: Carga LegendO[perf]: Mem ssh A configuração do servidor, vai no arquivo /etc/ssh/sshd_config A configuração do cliente vai no /etc/ssh/ssh_config. Com o pacote instalado, você inicia o servidor usando o comando /etc/init.d/ssh start No Debian o servidor só funcionará se o arquivo sshd_not_to_be_run, presente em /etc/ssh for renomeado ou excluído. Renomeando o arquivo: mv /etc/ssh/sshd_not_to_be_run /etc/sshd_not_to_be_run.old Roberto Amaral – Marcelo Soares Farias Página 102 03/03/2010 Universidade Tuiuti do Paraná GERDS - Grupo Interdisciplinar de Redes de Computadores e Sistemas Distribuídos CURSO: LPI - SERVIDORES DE REDES E GERENCIAMENTO - LINUX Em uma empresa, é padrão existir um equipamento específico para servidor de serviços, assim como roteador para acesso a Internet. Este equipamento sempre encontra-se isolado e o mesmo somente pode ser acesso através de login remoto. Para as pessoas que trabalham na empresa, este Servidor/Roteador é utilizado como firewall, proibindo tráfego em certos horários, palavras e principalmente sites. Portanto o objetivo deste trabalho é por em prática a implementação de um equipamento Servidor/Roteador que atenda uma empresa. Cliente Apache Cliente Squid Clinete SSH Rede Trabalho (10.11.12.X/24) Interface Interna 10.11.12.2 Servidor Apache Altere o DocumentRoot para /var/www/html Servidor SSH Antes de fazer o Squid crie um compartilhamento com IPTable Servidor Squid Bloqueando sexo e site Interface Interna 10.11.12.1 Interface Externa a local/atual Rede Laboratório 10.10.10.10/24 Gateway 10.10.10.10 INTERNET Roberto Amaral – Marcelo Soares Farias Página 103 03/03/2010