12.28.2012

Portas utilizadas pelos serviços de Rede mais comuns

Quadro com as portas dos serviços mais comuns e que devem ser sabidas de cor por qualquer administrador de redes.
Porta(s) Serviços
20, 21 File Transfer Protocol (FTP)
23 Telnet
25 Simple Mail Transfer Protocol (SMTP)
50, 51 IPSec
53 Domain Name Server (DNS)
67, 68 Dynamic Host Configuration Protocol (DHCP)
69 Trivial File Transfer Protocol (TFTP)
80 HyperText Transfer Protocol (HTTP)
88, 749 Kerberos
110 Post Office Protocol (POP3)
119 Network News Transport Protocol (NNTP)
137-139 NetBIOS
143 Internet Message Access Protocol (IMAP4)
161, 162 Simple Network Management Protocol (SNMP)
389 Lightweight Directory Access Protocol (LDAP)
443 HTTP with Secure Sockets Layer (SSL)
1701 Layer Two Tunneling Protocol (L2TP)
1723 Point-to-point Tunneling Protocol (PPTP)

12.13.2012

Instalação do Webmin no CentOs 6.3

O Webmin é um sistema Web para administração de servidores Linux muito abrangente e poderoso. Para instalá-lo com suporte SSL (permite acessos https o que é importante por razões de segurança) faça-se o seguinte :

Habilitar repositório webmin. É possível efetuar o download do pacote com o wget e instalar o webmin com o comando rpm. No entanto assim simplifica-se o processo e asseguram-se futuros updates do programa.

Criar ficheiro~~: #vi /etc/yum.repos.d/webmin.repo

Adicionar texto:

[Webmin]
name=Webmin Distribution Neutral
#baseurl=http://download.webmin.com/download/yum
mirrorlist=http://download.webmin.com/download/yum/mirrorlist
enabled=1

Importar e instalar a chave GPG para garantir que apenas pacotes assinados são instalados para o Webmin.

# wget http://www.webmin.com/jcameron-key.asc
# rpm --import jcameron-key.asc

Instalar Webmin

#yum install webmin

Iniciar o serviço:

service webmin start

Por defeito, o Webmin corre na porta 10000, sendo necessário abrir a porta na firewall. Adicionar a respectiva regra e reeiniciar o serviço iptables.

#iptables -A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT

service iptables restart

Pode-se agora aceder por http colocando no browser o IP da máquina e a respetiva porta: http://[IP da máquina]:10000

Para configurar o acesso por https é necessário instalar módulo SSLeay que permite a operabilidade entre os scripts perl que constituem o Webmin e a livraria OpenSSL

#yum install perl-Net-SSLeay

Acede-se ao Webmin e activa-se o acesso https Webin --> Webmin configuration --> Enable SSL if available? --> Yes

A partir desse momento não é mais possível aceder por http.

Nmap - Introdução e alguns exemplos de comandos.



O nmap ( Network Mapper) é um programa que permite efectuar o scanning de redes podendo ser utilizado para auditorias de segurança já que permite descobrir portas abertas e serviços a correr em máquinas remotas. Obviamente, pode ser utilizado para fins ilícitos, sendo uma das ferramentas de eleição para esquemas de footprintig. Como tal, em muitos países existe legislação que consagra a proibição de utilização de programas de rastreamento como o nmap. Isto dito, a utilização do nmap para efectuar o scanning de sistemas na Internet pode levar a que as Instituições que são alvo desses atos os encarem como hostis e procedem judicialmente contra os autores dos mesmos. Relembre-se que as firewalls têm mecanismos para detectar, bloquear e informar os administradores quando este tipo de acções ocorrem, não sendo muitas das vezes difícil verificar o IP de origem do scan. Obviamente existem métodos sofisticados que permitem utilizar o nmap de forma a mitigar a sua detecção, no entanto desencoraja-se a utilização deste tipo de ferramentas para outra utilização que não nos sistemas e máquinas que directamente administramos.

Um administrador poderá recorrer ao nmap para responder às seguintes perguntas:
  1. Quantos computadores com interfaces de rede activas existem na Rede Local ?
  2. Que endereços IP estão atribuídos?
  3. Qual é o sistema operativo das máquinas?
  4. Que portas estão abertas ?
  5. Existem sistemas contaminados com vírus/malware ?
  6. Existem máquinas e serviços de rede não autorizados ?
  7. Existem sistemas com falhas graves de segurança?
No CentOs o nmap não vem instalado por omissão. Verifique se o programa está instalado com o comando:
[root@centos01 ~]# rpm -qa nmap

Se não devolver nenhum resultado, instale o programa com o comando
[root@centos01 ~]#yum install nmap -y

O comando rpm deveolverá agora o resultado:
[root@centos01 ~]# rpm -qa nmap
nmap-5.51-2.el6.i686
Scan a um endereço IPv4 ou usando o nome do host
nmap 172.16.1.1 ou nmap srv1.local

Scan a múltiplos endereços IP
nmap 172.16.1.1 172.16.1.2 172.16.1.3

Scan a uma subnet
nmap 192.168.1.0/24

Scan recorrendo a um wild card
nmap 192.168.1.*

Scan utilizando um ficheiro de texto contendo os endereços IP ou nomes dos hosts
nmap -iL /tmp/test.txt

Scan com exclusão de endereços
nmap 192.168.1.0/24 --exclude 192.168.1.5,192.168.1.254

Scan com exclusão de endereços contidos num ficheiro de texto
nmap -iL /tmp/lista.txt --excludefile /tmp/excluir.txt

Ativar deteção de OS
nmap -A 192.168.1.254
nmap -v -A 192.168.1.1

Verificar se host ou rede está protegido por uma firewall
nmap -sA 192.168.1.254

Scan a host/rede protegido por uma firewall
nmap -PN 192.168.1.1

Scan a host/endereço IPv6
nmap -6 2607:f0d0:1002:51::4

Scan a um host ou rede para detetar serviços que estejam a correr
nmap -sP 192.168.1.0/24

Efetuar um scan rápido
nmap -F 192.168.1.1

Descobrir a razão pela qual uma porta está num determinado estado
nmap --reason 192.168.1.1

Mostrar apenas as portas possivelmente abertas
nmap --open 172.16.1.1

Scan a portas específicas
nmap -p 80 192.168.1.1
nmap -p T:80 192.168.1.1 (TCP) 
nmap -p U:53 192.168.1.1 (UDP)
nmap -p 80,443 192.168.1.1 (duas portas)
nmap -p 80-200 192.168.1.1 (range de portas)
nmap -v -sU -sT -p U:53,111,137,T:21-25,80,139,8080 192.168.1.254 
nmap -p "*" 192.168.1.1 (todas as portas)


Scan com deteção de SO remoto
nmap -O 192.168.1.1
nmap -O  --osscan-guess 192.168.1.1
nmap -v -O --osscan-guess 192.168.1.1

Detecção precisa da versão remota dos serviços a correrem num sistema
nmap -sV 192.168.1.1

Scan rápido de portas abertas de todos os dispositivos numa subnet
nmap -T5 192.168.1.0/24

Detecção de serviços UDP (DNS, DHCP, SNMP)
nmap -sU 192.168.1.1

Scan com utilização de pings TCP ACK (PA) e TCP Syn (PS) (utilizados se a firewall estiver a bloquear o protocolo ICMP
nmap -PS 192.168.1.1

Detecção das portas TCP mais utilizadas com recurso a TCP SYN
nmap -sS 192.168.1.1 (scan furtivo)
nmap -sA 192.168.1.1 (scan furtivo)
nmap -sW 192.168.1.1 (scan furtivo)
nmap -sM 192.168.1.1 (scan furtivo)

Detecção de falhas de segurança em firewalls
nmap -sN 192.168.1.254
nmap -sF 192.168.1.254
nmap -sX 192.168.1.254

Scan com recurso a pacotes "fragmentados" (evita detecção)
nmap -f 192.168.1.1

Scan com spoofing do endereço MAC
nmap -v -sT -PN --spoof-mac MAC-ADDRESS-HERE 192.168.1.1
nmap -v -sT -PN --spoof-mac 0 192.168.1.1 (gerado aleatoriamente)

Caso possua um sistema com GUI poderá utilizar o programa ZENMAP que não é mais do que o nmap com uma interface gráfica (yum install zenmap -y para instalá-lo no CentOs).

Fonte: http://www.cyberciti.biz

11.30.2012

Configurar IP estático - Linux CentOs 6.3

Não investiguei ainda porquê, mas não consegui correr o system-config-network numa instalação base do CentOs. Assim sendo, recorri ao processo de configuração manual.

Ficheiro ifcfg-eth0

DEVICE="eth0"
BOOTPROTO="dhcp" 
HWADDR="xx:xx:xx:xx:xx:xx"
NM_CONTROLLED="yes"
ONBOOT="no"
TYPE="Ethernet"
UUID="xxxxxxxx-05a0-4adf-84fd-850aca6521c7

Configurar o ficheiro ifcfg-eth0

[root@centos ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static"
HWADDR="xx:xx:xx:xx:xx:xx" 
NM_CONTROLLED="yes"  
ONBOOT="yes"  
TYPE="Ethernet"  
UUID="xxxxxxxx-05a0-4adf-84fd-930bcde234c7"  
IPADDR=172.16.1.100
NETMASK=255.255.255.0

Configurar Gateway

[root@centos ~]# vi /etc/sysconfig/network
NETWORKING=yes  
HOSTNAME=homeall.local
GATEWAY=172.16.1.254

Configurar DNS

[root@centos ~]# vi /etc/resolv.conf

nameserver 208.67.222.222

Reeiniciar o serviço de Networking do sistema

[root@centos ~]# service network restart

11.27.2012

IPv6 - Curso on-line em português

Os conhecimentos de IPv6 tornam-se cada vez mais importantes. O link http://ipv6.br/curso/ disponibiliza um curso excelente, em português, onde se podem aprender as principais características do protocolo. O próprio site possui imensos recursos sobre IPv6. Visualização obrigatória!

10.25.2012

Noções básicas - Cisco ZBF (Zone Based Firewall)

Este artigo tem como objetivo apresentar alguns conceitos teóricos básicos sobre o ZBF - Zone Based Firewall-. É apresentada uma configuração básica de uma ZBF num cenário muito simples (router com uma ligação à Internet), mas contudo suficiente para perceber os conceitos básicos. Refira-se que a Cisco aconselha vivamente a utilização desta tecnologia tendo mesmo deixado de desenvolver a antiga ferramenta para implementação mecanismos de firewall stateful num router - CBAC-. Dito isto, a aprendizagem e acompanhamento da evolução das ZBFs é totalmente aconselhável por parte de administradores Cisco. As ZBFs podem suportar (conforme a versão do IOS)

  • Firewall de estado ou Stateful inspection
  • Application inspection
  • Filtragem de pacotes
  • Filtragem de URLs
  • Firewall transparente
  • Suporte para VRF – Virtual routing and forwarding

Com as ZBFs as interfaces são colocadas em zonas. As zonas podem ter qualquer nome atribuído, sendo que nomes como inside, outside ou DMZ são os escolhidos normalmente. As políticas são especificadas contemplando qual o tráfego que pode ser originado e qual a ação que a firewall deve ter sobre o mesmo. Cada uma das situações requer uma política diferente.

Uma zona precisa de ser inicialmente criada e só depois se podem atribuir interfaces a essa zona. Uma interface apenas pode pertencer a uma zona, sendo que uma zona pode ter mais do que uma interface. Existe uma zona por defeito, a self zone, sendo esta uma zona lógica. Para cada pacote dirigido ao router este automaticamente o interpreta como direcionado para a self zone e inversamente o tráfego que sai do router é interpretado como saindo da self zone. Por defeito, todo o tráfego que sai da self zone é permitido, sendo que tal comportamento pode ser alterado. Para todas as restantes zonas criadas administrativamente, não é permitido tráfego entre interfaces de zonas diferentes, sendo apenas permitido se pertenceram à mesma zona.

Se pretendermos que o tráfego entre interfaces colocadas em zonas diferentes seja permitido, temos que criar uma política específica para tal, entrando em equação o conceito de zone pair. Um zone pair, é uma configuração onde é identificado tráfego com origem numa zona para um destino noutra zona. O administrador associa uma série de regras (policy) para esse zone pair, onde especifica o tipo de inspeção a realizar sobre o tráfego e aplica essa policy ao zone pair.

No nosso exemplo, vamos criar duas zonas (inside, outside) e atribuir a interface interna à inside zone e a interface externa à outside zone. Depois criaremos uma policy para inspecionar o tráfego gerado pelos utilizadores com destino à Internet (Cada ligação vai gerar uma entrada na stateful database da firewall do IOS e apenas o tráfego de retorno legitimado pela informação constante nessa base de dados será permitido. Todo o restante é bloqueado. Os conceitos de ZBF aproximam a tecnologia usada aos conceitos aplicados nas firewalls de 2ª e nalguns aspetos de 3 geração)

Num exemplo mais complexo, uma empresa que tenha três interfaces (interna, externa e DMZ), criará 3 zonas onde colocará cada uma das interfaces, inside, outsider e DMZ. Em comparação com o cenário anterior, será criado um zone pair adicional (outside para DMZ) e aplicada uma política que permita que utilizadores na Internet possam enviar tráfego para os servidores colocados na DMZ. Noutro artigo exploraremos uma configuração possível para o efeito.

A Cisco tem uma linguagem para criar as políticas C3PLCisco Common Classification Policy Language. O processo para criar uma policy tem 3 componentes:

  • Class maps: Identificam tráfego a ser inspecionado. Tal pode ser feito desde o Layer 3 ao Layer 7, incluindo tráfego originado por aplicações específicas. Podem referir acls para identificar tráfego assim como referir outros class maps. Um class map pode especificar que todos os match statemets têm que combinar (match-all) ou que basta uma condição de um match se verificar (match-any). Um class-map por default que albergue todo o tráfego que não é alvo de condições de verificação pode ser usado.
  • Policy maps: Acções a serem tomadas após inspeção do tráfego. As acções que podem ser tomadas são inspect (ordena stateful inspection dos tráfego), permit ( permite sem inspecionar), drop, ou log.
  • Service policies: Especifica onde é aplicada a policy, identificada por um policy map, num zone pair.

Se um policy map contém múltiplas ações baseadas em diferentes class maps, o policy map é processado do seu inicio até ao fim, aplicando as acões conforme o match do tráfego com as condições definidas nas class maps. Se nenhuma das condições se verificar, entra em vigor a ação por defeito. A default policy para o tráfego que pretende inicar-se numa zona com destino a outra é uma negação implícita, implicit deny . A exceção é o tráfego originado de e para a self zone, que é permitido por defeito. Reveja-se no quadro seguinte as ações que podem ser especificadas num policy map:

  • Inspect: Ativa mecanimos de firewall stateful sobre o tráfego, deve ser aplicado no tráfego gerado para a Internet.
  • Pass: Permite o tráfego sem criar mecanismos de inspeção. Poderá ser necessário para permitir determinados tipos de tráfego inbound e outbound.
  • Drop: Bloqueia o tráfego de circular entre os zone pairs
  • Log: Gera mensagens de log. Aplica-se geralmente no tráfego que foi bloqueado

Quando um router recebe um pacote, toma uma decisão sobre o roteamento, encaminhando o pacote para uma interface ou fazendo um drop caso não conheça nenhum destino. Com uma ZBF configurada, o router atentará às políticas definidas e à informação da stateful database. A tabela seguinte mostra o fluxo de tráfego entre várias interfaces de várias zonas, dependendo da configuração. Convém memorizar a informação constante na tabela para efeitos de troubleshooting de ZBFs. Refira-se que Ingress refere-se a tráfego a entrar uma interface e Egress refere-se a tráfego que sai de uma interface.

Interface Ingress (membro de uma zona) Interface Egress (membro de uma zona) Existe um Zone pair com uma policy aplicada Resultado
Não Não Não é relevante O trágefo é encaminhado
Não Sim (qualquer zona) Não é relevante O tráfego não é encaminahdo
Sim (zona A) Sim (zona B) Não O tráfego não é encaminhado
Sim (zona A) Sim (zona B) Sim A policy é aplicada

Se existe um zone pair que identifica tráfego entre duas zonas e a policy não está aplicada nesse zone pair, o comportamento por defeito é não encaminhar o tráfego como se nenhum zone pair existisse.

Uma configuração com recurso a ZBFs inclui os seguintes componentes:

  • Zonas
  • Interfaces que são membros dessas zonas
  • Class maps que identificam o tráfego
  • Policy maps que usam class maps para identificar o tráfego e que especificam as ações a tomar
  • Zone pairs que identificam um fluxo de tráfego unidirecional, a iniciar-se em dispositivos pertencentes a uma zona e roteados para outra interface pertencente a outra zona
  • Service policy, que associa um policy map a um zone pair.

Com isto em mente, vamos criar uma configuração que implemente uma ZBF num router com um acesso à Internet:

Zonas

Vamos criar uma zona para a rede interna (LAN) e outra zona para a conter a interface pública ou seja a internet. Podemos atríbuir qualquer nome à zona mas no presente exemplo optamos por inside para a LAN e outisde para a zona que se liga à Internet. Optou-se por colocar essa informação na descrição das zonas (comandos facultativos)

RTHOME(config)#zone security inside
RTHOME(config-sec-zone)#description LAN_PRIVADA
RTHOME(config-sec-zone)#exit
RTHOME(config)#zone security outside
RTHOME(config-sec-zone)#description INTERNET
RTHOME(config-sec-zone)#exit

Colocar as interfaces nas respetivas zonas

RTHOME(config)#interface vlan1
RTHOME(config-if)#zone-member security inside

exit
RTHOME(config)#interface vlan2
RTHOME(config-if)#zone-member security outside

exit

Vamos criar as Class maps que identificam o tráfego. Escolhemos aleatoriamente alguns protocolos para figurarem no exemplo. Obviamente, este passo exige um planeamento prévio sobre o que é pretendido ao nível das políticas e da segurança.

RTHOME(config)#class-map type inspect match-any OUT_TRAFFIC_INTERNET
RTHOME(config-cmap)#match protocol dns
RTHOME(config-cmap)#match protocol ftp
RTHOME(config-cmap)#match protocol tcp
RTHOME(config-cmap)#match protocol udp
RTHOME(config-cmap)#match protocol ssh
RTHOME(config-cmap)#match protocol smtp
RTHOME(config-cmap)#match protocol icmp
RTHOME(config-cmap)#match protocol http
RTHOME(config-cmap)#match protocol https

Vamos criar uma policy map que vai referenciar a class map previamente criada para identificar o tráfego. Após essa referência é configurada a ação a tomar.

RTHOME(config-pmap)#class type inspect OUT_TRAFFIC_INTERNET
RTHOME(config-pmap-c)#inspect

Criamos agora o zone pair que identifica o sentido (unidirecional do tráfego) e o sercice policy que referencia o Policy map previamente configurado.

RTHOME(config)#zone-pair security PRIVATE_LAN_TO_INTERNET source inside destination outside
RTHOME(config-sec-zone-pair)#service-policy type inspect INTERNET_TRAFFIC
RTHOME(config-sec-zone-pair)#exit
RTHOME(config)#

Obviamente que terá de ser configurado PAT no Router para permitir que os disporitivos da LAN acedema à Internet.

ip access-list standard ACL_NAT
RTHOME(config-std-nacl)#permit 192.168.1.0 0.0.0.255

RTHOME(config-std-nacl)#exit
RTHOME(config)#
RTHOME(config)#interface vlan1
RTHOME(config-if)#ip nat inside
RTHOME(config-std-nacl)#exit
RTHOME(config)#interface vlan2
RTHOME(config-if)#ip nat outside
RTHOME(config-if)#exit
RTHOME(config)#ip nat inside source list ACL_NAT interface Vlan2 overload

Este exemplo deve servir como base para entender os conceitos das ZBFs. Contudo a configuração mostrada funciona perfeitamente num equipamento doméstico ou um router de uma pequena empresa.

Para saber mais

Fonte: Cisco CCNA Security Official Cert Guide

10.24.2012

Manipulação de ficheiros - Windows

Existem 3 comandos principais para copiar ficheiros

  • copy: comando básico de cópia de ficheiros. Pode ser utilizado para agregar o conteúdo de vários ficheiros de texto num só.
  • xcopy: aumenta as potencialidades do comando copy permitindo a manipulação de subpastas
  • robocopy: o comando mais versártil, permite manipulação de estruturas de pastas e de permissões

Exemplos do comando copy:

Comando copy Comentários
c:\>copy test.txt test2.txt Cria o ficheiro test2.txt a partir do ficheiro test.txt
c:\>copy test1.txt+test2.txt testtotal.txt Cria o ficheiro testtotal.txt agregando os conteúdos de test1.txt+test2.txt.
c:\>copy *.txt total.txt Cria o ficheiro total.txt a partir de todos os ficheiros com a extensão txt na presente pasta
c:\data>copy *.* c:\arquivo Copia todos os ficheiros para a pasta arquivo

Comando xcopy Comentários
c:\>xcopy c:\data d:\data /s
c:\>xcopy c:\data d:\data\ /s
O switch /s copia todos os ficheiros, pastas e subpastas da origem para o destino. Usar "\" se a pasta de destino não existir. Não existindo, o sistema vai perguntar se pretende enviar os dados para um ficheiro ou pasta. Se escolher pasta, todos os dados são combinados num único ficheiro. Se escolher ficheiro, toda a esttutura de pastas é recriada.
c:\>xcopy c:\data d:\data\ /s /e O switch /e garante que as pastas vazias são copiadas
c:\>xcopy c:\data d:\data\ /s /e /t O switch /t apenas copia a estrutura de pastas sem copiar os ficheiros
c:\>xcopy c:\data d:\data\ /s /e /y O switch /y impede que o sistema pergunte se pretende escrever por cima de ficheiros existentes.

O robocopy tem mais funcionalidades que o xcopy, permitindo copiar a metadata associada com um ficheiro. A metadata é identificado com recurso a flags. As flags podem ser usadas com /copy para especificar a metadata a copiar.

robocopy (metadata flag) Comentários
c:\>robocopy c:\data d:\data\ /copy:d Flag de data (d). O d identifica a própria flag
c:\>robocopy c:\data d:\data\ /copy:da Flag de atríbuto (a), incluindo atríbutos como hidden ou read-only
c:\>robocopy c:\data d:\data\ /copy:dat
c:\>robocopy c:\data d:\data\
Flag com timestamps (t), incluido quando o ficheiro foi criado ou modificado. As flags d, a e t são uasadas por defeito. Assim sendo os comandos têm o mesmo efeito.
c:\>robocopy c:\data d:\data\ /copy:dats Flag de segurança (s) onde são contempladas as permissões NFTS
robocopy c:\data d:\data\ /copy:datso Flag de owner(o), que permite manter o dono original do ficheiro. Se não for usado o dono passa a ser o utilizador que executou o comando

Vejam-se alguns exemplos do comando robocopy para manipulação de pastas e ficheiros

Comandos robocopy Comentários
c:\>robocopy c:\data d:\data\ Copia todos os ficheiros para a drive d:. Não inclui pastas.
c:\>robocopy c:\data d:\data\ /s Copia todos os ficheiros e pastas e subpastas não vazias.
c:\>robocopy c:\data d:\data\ /e Copia todos os ficheiros, pastas e subpastas, incuido pastas vazias (note-se que não foi necessário incluir o switch /s
c:\>robocopy c:\data d:\data\ /e /purge O switch /purge elimina os ficheiros e pastas do destino que já não estejam na origem
c:\>robocopy c:\data d:\data\ /mir O switch /mir faz mirror de todo o conteúdo da origem no destino. Faz o mesmo que o comando do exemplo anterior.
c:\>robocopy c:\data d:\data\ /mov Copia todos os ficheiros para o destino eliminado-os da origem (mesmo que cortar e copiar). Não incui subpastas.
c:\>robocopy c:\data d:\data\ /move Similar ao comando anterior, inclui também todas as subpastas

O output do comando robocopy permite verificar quantos ficheiros e pastas foram copiados, ficheiros que não o foram, eventuais falhas e erros, etc.

Para verificar estas e outras opções existe uma ferramenta em modo gráfico muito boa. O Robocopy GUI. O robocopy deverá ser o comando por eleição a utilizar para manipulação avançada de copias de dados

10.23.2012

Introdução Linha de Comandos - Windows 2008

Pensa-se que os administradores de Windows apenas utilizam o ambiente gráfico. Em contraponto, um bom administrador de Linux raramente admitirá usar o GUI, não obstante a evolução notável que muitas ferramentas gráficas para Linux sofreram nos últimos anos (Refira-se que linha de comandos num sistema Linux é muito mais versátil, complexa e útil que a existente num sistema Windows). Esquecendo preconceitos, qualquer administrador de sistemas deverá pelo menos conhecer a linha de comandos não obstante a plataforma em que trabalha. Apresenta-se neste artigo uma introdução básica da linha de comandos tendo como pano de fundo o Windows 2008. Refira-se linha de comandos e não a  Windows PowerShell que é uma framework da Microsoft para execução de comandos, automatização de tarefas e possibilidade de usar extensivamente uma linguagem própria de scripting.

A linha de comandos encontra-se no Start menu no Windows 2008 por defeito. Caso não esteja poderá aceder-lhe fazendo Start >> digitar Cmd na Search Box >> Enter. Em alternativa Start >> All Programs >> Acessories >> Command Prompt

Se o logon no sistema for feito com a conta de administrador, a linha de comandos será executada em modo de administração. Caso o log on seja feito com outra conta, poderá aceder na mesma à linha de comandos mas com privilégios reduzidos. Para executar uma propmpt numa conta não administrativa com direitos de administração:
Botão direto do rato sobre da Command prompt >> Escolher “Run as administrator” e inserir credenciais.

Existem os seguintes atalhos básicos para o teclado

Cursor cima Evoca o último comando
Cursor baixo Evoca o próximo comando
Page Up Evoca o comando mais antigo digitado na sessão
Page Down Evoca o último comando digitado na sessão
Cursor esquerdo Move o cursor para trás um caracter
Cursor direito Move o cursor para a frente um caracter
CTRL+Cursor esquerdo Move o cursor para trás uma palavra
CTRL+Cursor direito Move o cursor para a frente uma palavra
Home Move o cursor para o ínicio da linha
End Move o cursor para o fim da linha
Esc Limpa a linha de comandos

O comando doskey guarda num buffer os últimos 50 comandos efetuados. Poderá usar o comando c:\doskey /history para ver os comandos, o comando c:\>doskey /listsize = 100 para alterar para 100 o número de comandos a guardar pelo buffer (Poderá alterar este parâmetro em modo gráfico com Botão direito na barra de título da linha de comandos >> Properties >> Buffer Size. Para ver mais opções para este comando ou qualquer outro, execute c:\doskey /? .

Uma função muito útil do comando doskey é a sua utilização para a criação de macros. Imaginemos que desejamos parar e iniciar um serviço muitas vezes, ou seja, executar os comandos sc stop netlogon e sc start logon. Podemos criar as macros com os comandos c:\>doskey stpnl = sc stop netlogon e c:\>doskey sttnl = sc start netlogon . Assim, cada vez que quisermos parar e iniciar o serviço bastará digitar c:\>stpnl e c:\>sttnl . Note-se que estas macros são armazenadas temporariamente, ou seja, quando fechar a prompt onde foram configuradas, desaparecem.

Pode copiar e colar texto da linha de comandos para o clipboard o comportamento difere se a opção Quik Edit Mode (Botão direito na barra de título da linha de comandos >> Properties >> Quik Edit Mode) está ativa. Caso esteja, basta selecionar o texto com o rato e digitar enter para o copiar. Se não estiver ativo, é necessário clicar com o botão direito do rato na linha de comandos>> Mark >> selecionar o texto com o rato e digitar enter para o copiar.

Os sistemas Windows não são case-sensitive como os sistemas Linux. Assim sendo os comandos RepAdmin /SyncAll  | Repadmin /syncall    | REPADMIN /SYNCALL são iguais. Para efeitos de legibilidade, na documentação os comandos quando contêm duas ou mais palavras costumam ter a primeira letra dessas palavras em maiúsculas.

Existem contudo algumas exceções. Nomeadamente quando se instalam ou adicionam serviços a um sistema Windows 2008 Server Core Edition é necessário respeitar maiúsculas e minúsculas. Por exemplo o comando c:\>start ocsetup dhcpservercore não funcionaria, sendo necessário executar c:\>start ocsetup DHCPServerCore para iniciar o processo de instalação do serviço de DHCP no servidor. A linha de comandos interpreta um espaço como a separação entre parâmetros.

Quando um parâmetro tem um ou mais espaços é necessário colocar aspas para o delimitar. Por exemplo, veja-se a sintaxe do comando que atribui um endereço IP a uma interface de rede: netsh interface ipv4 set address name = Name of NIC static ip address sub-net mask . Se o nome da interface de rede for Local area connection o comando a executar deverá ser:
C:\>netsh interface ipv4 set address name = "local area connection" static 192.168.1.15 255.255.255.0
Uma variável é um repositório com uma determinada informação.  As varáveis permitem aceder a essa informação e agilizar a construção dos comandos.
Se pretendermos ver a pasta de instalação do Windows:

C:\echo %systemroot%
C:\Windows

Variável Descrição
%programfiles% Caminho da pasta onde se encontram instalados os programas
%systemdrive% Caminho da diretoria root
%appdata% Caminho onde as aplicações instalam informação
%userdomain% Nome do domínio
%logonserver% Nome do controlador de domínio que validou a conta
%processor_architecture% Arquitetura do processador (32 ou 64 bits)
%allusersprofile% Localização do perfil da conta

Uma das grandes vantagens das variáveis é poderem ser utilizadas na construção de comandos. Por exemplo, para editarmos o ficheiro windowsupdate.log podemos executar o comando c:\notepad %systemroot%\windowsupdate.log
Podemos criar variáveis com o comando: [set variable-name = value] . Por exemplo C:\>set var1 = test , atríbui a string test à variável com o nome var1.
Podem-se modificar um comando com a adição de um switch. Um switch é precedido por um espaço e um traço “-“ ou barra “/” .  Por exemplo, para limpar a tabela de cache de DNS podemos usar os comandos c:\ipconfig /flushdns ou c:\ipconfig –flushdns . Curiosamente o comondo ipconfig/flushdns , sem espaço, funcionaria. Como tal não sucede em muitos comandos, aconselha-se a utilizar sempre espaços.

O comando dir lista diretorias. Para afinarmos uma pesquisa podemos usar wildcards que representam um ou mais caracteres.  Existem dois disponíveis na linha de comandos: o asterisco “*” que se refere a nenhum ou mais caracteres e o ponto de interrogação “? ” que apenas se refere a um único caractere. Vejam-se os exemplos:

Wildcard Descrição
C:\dir *.txt Lista todos os ficheiros com extensão txt
C:\>dir a* Lista todos os ficheiros que comecem com um a
C:\>dir a*.txt Lista todos os ficheiros que comecem com um a e tenham extensão txt
C:\>dir week?.txt Lista todos os ficheiros que comecem com week e tenham apenas mais um carater, com extensão txt

Para listar, na linha de comandos, quase todos os comandos disponíveis e uma breve descrição de cada um (alguns comandos avançados para funções muito específicas não surgem na listagem), basta executar o comando help.
Para obter informação mais detalhada sobre um comando em particular, usar o switch /? . Por exemplo, o comando ipconfig /? vai mostrar as opções disponíveis e um sucinta explicação de cada uma delas. Existe também a possibilidade de obter informação com a palavra help antecedida do comando Exemplo: c:\help dir . Contudo, para muitos comandos essa opção não devolve nenhum resultado. Assim sendo a opção /? é a mais aconselhável.
Convém perceber a notação utilizada para pode usufruir da informação devolvida pelos comandos help. Veja-se o quadro seguinte:

Notação Descrição Exemplo
Texto sem parêntesis ou chavetas. Itens que devem ser digitados tal como surgem ipconfig
[Texto com parêntesis retos] Itens opcionais echo[mensagem]. O comando echo mostra se a função está ou não ativa no sistema. O comando  echo %programfiles% devolve o conteúdo da variável
{Texto com chavetas} Escolher um dos itens requeridos gpupdate [/target:{computer | user}] . Se usar o switch /target deve fornecer o nome do computador ou do utilizador
| Barra vertical Exclusão mútua gpresult [/s system [/u username [/p [password]]]] [/scope scope] [/user targetusername] [/r | /v | /z] [(/x | /h) <filename> [/f]]   Se usar as opções /r ou /v não pode usar a opção /z
Itens que podem ser repetidos [winrm operation resource_uri [-switch:value[-switch:value] ...] [@{key=value[;key=value]...}]  Os pontos indicam que podem ser inseridos múltiplos parêmtros na mesma linha.

A linha de comandos mostra a atual localização. No caso de ter sido executada por um administrador, o caminho apresentado será c:\Windows\system32> .  Para editar um ficheiro noutra localização poderá simplesmente executar o comando c:\windows\system32>notepad c:\temp\meuficheiro.txt . Obviamente se o ficheiro se encontrar no mesmo sítio (caminho atual referenciado pela linha de comandos) não é necessário fornecer a localização .
Depreende-se que não foi necessário fornecer a localização do programa notepad para editar o ficheiro. Tal sucede porque o Windows sabe o caminho para o programa. O Windows server 2008 R2 tem na sua variável path os caminhos para c:\windows , c:\windows\system32 , c:\windows\system32\wbem e da powershell c:\windows\system32\windowspowershell\v1.0 se esta for instalada. Pode ver a path com os comandos c:\echo %path% e c:\>path .

Pode manipular a path com o comando c:\>path = c:\mypath que atribui para a atual sessão da linha de comandos a pasta c:\mypath , sendo que quando a sessão for encerrada cessa a atribuição. O comando c:\>path =  %path%;c:\mypath adiciona o novo caminho aos constantes na variável path. Quando encerrada a sessão, cessa a atribuição.

Vejamos uma lista simples de comandos:

  • dir texto*.* /s : Procura ficheiros que comecem com "texto". O switch /s faz com que a pesquisa seja feitas em todas as subdiretorias.
  • cd temp/fotos: Muda para a pasta especificada
  • cd .. : Move uma pasta para cima. Notar que tem um espaço entre cd e ..
  • cd \ : Move para a raiz da drive onde se encontra
  • md pasta1: Cria uma pasta com o nome pasta1
  • rd pasta1: Elimina a pasta mas sse estiver vazia
  • rd pasta /s /q: Elimina a pasta e todos os ficheiros e sub-diretorias (switch /s) sem pedido de confirmação (switch /q).

Refira-se pela sua importância os comandos de direcionamento de output > e >> com dois exemplos:

  • > : gpresult /z > grouppolicies.txt cria o ficheiro grouppolicies.txt adicionando-lhe o output do comando gpresult /z. Se o ficheiro já existir escreve por cima do mesmo.
  • >> : gpresult /z >> grouppolicies.txt adiciona o output do comando gpresult /z ao ficheiro não escrevendo por cima.

9.24.2012

Informação básica sobre OpenSSH


O protocolo ssh tornou-se o programa de eleição para conexões remotas, visto que a comunicação é encriptada ao contrário do que sucede com os velhinhos telnet ou rlogin.
O protocolo ssh usa o mecanismo de encriptação de chave pública. Nesta forma de criptografia necessitamos de duas chaves, uma chave pública e outra privada. A chave pública pode ser livremente divulgada e a chave privada deve ser protegida a todo o custo, visto ser esta a responsável pela efetiva segurança da encriptação. Para mais informação sobre este método clique aqui.

Do ponto de vista do administrador, deveremos sempre efetuar logins remotos recorrendo ao protocolo ssh e nunca por telnet. Tal aplica-se a máquinas Linux, routers e outros dispositivos onde exista essa opção. Saliente-se igualmente, que se deverá em analogia usar sempre o protocolo https ao invés do http para aceder a configurações de equipamentos. Deve-se ter igualmente em atenção o tamanho da chave.  Há alguns anos consideravam-se as chaves de 128 bits seguras. Hoje em dia deverão ser escolhidas chaves de 512 ou mesmo 1024 bits. Quanto maior é a chave mais lento se torna o processo de encriptação, sendo que actualmente tal não constituí um problema, mesmo para chaves de 1024 bits.

No mundo Linux a implementação mais conhecida do servidor de ssh é o OpenSSH.  Para efetuar ligações ssh existem em Linux aplicações nativas que o fazem. Para Windows, destaca-se o inevitável Putty e para administradores mais avançados recomenda-se a solução comercial SecureCrt (disponibiliza atualmente versões para Linux).

Numa instalação mínima RHEL ou CentOS  o OpenSSH virá instalado por defeito. Pode sempre verificar-se se está instalado
[root@serverA ~]# rpm  -qa | grep -i OpenSSH
OpenSSH-*
OpenSSH-server-*
………

Se por alguma incidência o OpenSSH não estiver instalado pode sempre fazê-lo com o comando:

[root@serverA ~]# yum  -y install OpenSSH-server

Em Ubuntu os commandos análogos são:

mm@ubuntu-serverA:~$ dpkg -l OpenSSH-server 

mm@ubuntu-serverA:~$ sudo apt-get  -y install OpenSSH-server

Se pretende que a máquina seja acedida por ssh deverá assegurar que o deamon está ativo. Em sistemas RHEL/CentOS confirme com 

[root@serverA ~]# service sshd status
sshd (pid 2242 2101) is running..

Caso não esteja a correr, execute o comando 

[root@serverA ~]# service sshd start

Para parar deverá usar stop para reinicializar, restart. 

Analogamente para Ubuntu:

pmatias@ubuntu-serverA:~$ sudo /etc/init.d/ssh start

e

pmatias@ubuntu-serverA:~$ sudo /etc/init.d/ssh stop

Conforme mencionado, o OpenSSH costuma estar instalado e a correr na maioria das distribuições de Linux. O ficheiro de configuração costuma estar localizado na diretoria /etc/ssh/ com o nome sshd_config. As instalações baseadas em Debian, como o Ubuntu, também costumam ter o ficheiro de configuração nessa localização. Alguns dos parâmetros de configuração: 

  • AuthorizedKeysFile:  Especifica o ficheiro que contém as chaves públicas. Geralmente /[directoria home]/.ssh/ authorized_keys
  • Ciphers: Lista de cifras permitidas para a versão 2 do protocolo.
  • Port: Porta utilizado pelo protocolo, por defeito é a 22.
  • Protocol: Versão do protocolo. Existindo dois, o 1 e o 2, deverá ser sempre utilizado o 2, visto que o 1 é atualmente considerado inseguro. 
  • AllowTcpForwarding : Especifica  se o encaminhamento do protocol TCP é permitido. Por defeito encontra-se configurada a opção sim.
  • X11Forwarding: Especifica se o encaminhamento do protocolo X11 é permitido.  Por defeito encontra-se configurada a opção não.
  • ListenAddress: Especifica o endereço local que o deamon SSH escuta. 
O OpenSSH possui vários programas, o óbvio shh, o Secure Copy – scp e o Secure Ftp.

O programa cliente de ssh vai assumir que a autenticação no sistema remoto será com o mesmo utilizador que nesse momento está a efetuar a ligação no sistema local. Se no entanto pretender efetuar a autenticação com outro utilizador (supõe-se que está autenticado como root no sistema local e pretende ligar-se como utilizador pmatias no sitema remoto), deverá utilizar o comando: 

[root@serverA ~]# ssh -l pmatias serverB

Ou 

[root@serverA ~]# ssh pmatias@serverB

Após inserir a password correta efetuará login no sistema com a conta de utilizador pretendida. 
Relembre-se que se pretender autenticar-se como root, bastará

[root@serverA ~]# ssh serverB

Com o protocolo IPv6 implementado: 

root@serverA ~]# ssh -6  pmatias@2001:DB8::2

Obviamente, ao invés do nome do servidor pode usar o endereço IP da máquina. 

Uma das utilizações interessantes do ssh encontra-se na criação de túneis entre um sistema local e sistemas remotos, como se de uma VPN se tratasse, visto que a informação circula encriptada. Imaginemos o cenário: 

Temos uma máquina configurada como firewall (ServerA) com duas interfaces de rede. Uma das interfaces está diretamente ligada à Internet e a outra à LAN da empresa. Imagine-se que a interface pública ou WAN tem o IP 1.1.1.1 e a interface privada 192.168.1.1 da LAN 192.168.1.0/24. Todos os servidores e workstations não são acessíveis através da Internet. O único serviço permitido na Interface WAN é o deamon sshd. 

Suponha-se que um dos servidores internos possui uma aplicação WEB de contabilidade que o utilizador pmatias quer aceder a partir da Internet. O nome do servidor é “Contab”, com um endereço IP 192.168.1.100. O nome da workstation da qual vai ser estabelecida a ligação é “pcpessoal”. Relembrando que as máquinas da LAN da empresa não podem ser diretamente acedidas através da Internet, teremos então que efetuar o chamado tunneling SSH . Vejamos com detalhe todo o processo: 



  1. No seu próprio computador o utilizador vai autenticar-se com as suas credenciais.
  2. Localmente, o utilizador vai criar um túnel da porta 9000 da sua máquina à porta 80 da máquina que corre a aplicação web à qual pretende aceder. Para o fazer vai executar o comando  [pmatias@pcpessoal ~]# ssh  –L 9000:192.168.1.100:80 1.1.1.1 ou efetuar a ligação ssh e  ssh> -L 9000:192.168.1.100:80
  3. Após autenticar-se com sucesso no servidor remoto, neste caso, o serverA, poderá então abrir o browser para aceder à aplicação. O utilizador verificará se o túnel está a funcionar corretamente, abrindo o browser para aceder à porta que está a reencaminhar o tráfego na máquina local e colocando o endereço http://localhost:9000 .
  4. Se tudo correu conforme previsto, o conteúdo web fornecido pelo servidor da aplicação surgirá, tal como se o mesmo estivesse a ser acedido a partir de uma máquina dentro da LAN da empresa.Para terminar a ligação e desfazer o túnel bastará desligar a ligação ssh estabelecida. 
Este método permite o acesso seguro a sistemas, seja em redes internas LAN ou através da Internet. Não pode ser considerada uma solução VPN completa visto que não é possível aceder concorrencialmente a todos os sistemas de uma LAN remota, mas funciona perfeitamente para aceder aos recursos de uma máquina. No exemplo referido, efetuou-se tunneling de http através de SSH, mas qualquer protocolo poderia ter sido utilizado, como Telnet ou VNC. Este método é igualmente utilizado para ultrapassar eventuais restrições de firewalls e proxies para aceder a recursos. 

Relembrando a sintaxe do comando: 

ssh –L [porta local]:[IP da máquina de destino]:[porta de destino] [IP do servidor ssh]

O Secure Copy (scp) é utilizado como o substituto do antigo rcp, permitindo efetuar cópias de ficheiros entre máquinas. Imaginemos que o utilizador está autenticado na sua máquina e pretende copiar um ficheiro chamado . bashrc localizado na sua diretoria pessoal  para a sua diretoria pessoal no ServerA. O comando será: 

[pmatias@hostA ~]$ scp .bashrc serverA:/home/yyang

Para efetuar a operação inversa, bastará trocar a ordem

[pmatias@hostA ~]$ scp serverA:/home/yyang/.bashrc  .

O Secure FTP permite uma operacionalidade idêntica ao protocolo ftp, mas de forma segura. Para efetuar a ligação a um sistema remoto que tenha um servidor de SFTP a correr bastará executar o comando, usando as credenciais do acesso por ssh:

[root@hostA ~]# sftp yyang@serverA

Após a autenticação surgirá a prompt 

sftp>

Poderá, tal como no acesso por ftp, listar directorias e efetuar download e upload de ficheiros. Para mais informações sobre os comandos disponíveis digitar ? .

Existe um excelente software para Windows que permite toda a operacionalidade do SCP e do SFTP num ambiente user-friendly – WinSCP-. Descarregue-o em http://winscp.net/eng/download.php

Fontes: Linux Administration, a beginners guide, wikipedia. 


9.19.2012

Funcionamento básico do comando tar


Num sistema Linux a compressão e arquivamento de ficheiros são normalmente realizados com dois comandos gzip e o tar.
O comando tar agrupa vários ficheiros num um único ficheiro, sem compressão. Para comprimir esse grande ficheiro necessitamos de um programa específico para o efeito.
Podendo sempre recorrer ao manual do programa [man tar] para ver todas as potencialidades, as opções mais comuns são as seguintes:

-c [cria um novo arquivo]
-t [visualiza o conteúdo do arquivo]
-x [extrai o conteúdo do arquivo]
-f [especifica o nome do ficheiro ou do dispositivo no qual o arquivo está localizado]
-j [filtra o arquivo com o programa de compressão bzip2]
-z [filtra o arquivo com o programa de compressão gzip]

Saliente-se que o comando tar é dos poucos programas em Linux onde a ordem de colocação das opções é relevante. A opção -f (localização do ficheiro) se colocada noutro lugar não funcionará.

Vejamos alguns exemplos, criando uma pasta com 4 ficheiros:

[marco@pweb _Temp]$mkdir lixo ; touch lixo/{1,2,3,4}

Criemos agora uma ficheiro de arquivo lixo.tar contend todos os ficheiros existentes na pasta lixo.
[marco@pweb _Temp]$ tar -cf lixo.tar lixo/

Para visualizarmos o processo de arquivamento, criemos o ficheiro 2lixo.tar com a opção –v

[marco@pweb _Temp]$tar -vcf 2 lixo.tar lixo
lixo/
lixo/2
lixo/4
lixo/1
lixo/3

Nenhum destes ficheiros de arquivo possui algum tipo de compressão. Para comprimirmos os ficheiros, utilizamos o comando gzip em conjunto com o comando tar, criando o ficheiro 3lixo.tar.gz

[marco@pweb _Temp]$tar -vczf 3lixo.tar.gz lixo/
lixo/
lixo/2
lixo/4
lixo/1
lixo/3

Para extrair o conteúdo do ficheiro bastará usar a opção x

[marco@pweb _Temp]$tar -vxzf 3lixo.tar.gz
lixo/
lixo/2
lixo/4
lixo/1
lixo/3

Permissões em Linux


Num sistema Linux existem 3 níveis de utilizadores do sistema:

1. Utilizador (User) representado pela letra u refere-se ao dono do ficheiro .
2. Grupo ( Group) representado pela letra g, refere-se ao grupo de utilizadores .
3. Outros (Other) representado pela letra  o, refere-se a todos os outros utilizadores.

Para além disso existe outro nível de representação que engloba todos os utilizadores, representado pela letra a (ALL)
Refira-se igualmente os níveis de permissões:

1. Leitura (Read), representado pela letra r
2. Escrita (Write), representado pela letra w
3. Execução ( Execute), representado pela letra x

Os operadores ariteméticos “+”, “-“ e “=” permitem efetuar as operações de atribuição das permissões aos ficheiros.  O “+” e p “-“ atribuem e removem atribuições e o “=” define mandatoriamente as permissões removendo as existentes.

A mera listagem dos ficheiros com o comando ls não nos permite verificar as permissões. Para tal devemos colocar o switch –l , executando o comando ls –s

[marco@pweb _Temp]$ ls –l
total 0
-rw-rw-r--. 1 marco marco 0 Sep  9 01:57 exp1.txt

Pelo output do comando, verificamos que o Utilizador ou dono do ficheiro possui permissões de leitura e escrita, assim como os membros do grupo. Os restantes utilizadores apenas possuem permissões de leitura do ficheiro.

Suponhamos que temos determinado ficheiro que pretendemos executar, por exemplo, um scipt para realizar determinada tarefa. O ficheiro apenas tem permissões por defeito

[marco@pweb _Temp]$ ls –l
total 0
-rw-rw-r--. 1 marco marco 0 Sep  9 02:05 programa
[marco@pweb _Temp]$ chmod u+x programa
[marco@pweb _Temp]$ ls -l
total 0
-rwxrw-r--. 1 marco marco 0 Sep  9 02:05 programa

Neste momento, apenas o dono do ficheiro poderá executar o ficheiro. Na maioria das distribuições os ficheiros executáveis apresentam uma cor diferenciada dos restantes.
Se quisermos remover todas as permissões a todos os restantes utilizadores bastaria

[marco@pweb _Temp]$ chmod go-rwx programa
[marco@pweb _Temp]$ ls -l
total 0
-rwx------. 1 marco marco 0 Sep  9 02:05 programa

Para além deste método podemos mudar as permissões em modo octal , sendo este sistema mais direto e simples quando compreendido e dominado.
Para tal, estudem-se as seguintes tabelas:

User 
Group
Other
r
w
x
r
w
x
r
w
x
4
2
1
4
2
1
4
2
1

0
---
Sem permissões
1
--x
Execução
2
-w-
Somente escrita
3
-wx
Escrita e execução
4
r--
Leitura
5
r-x
Leitura e execução
6
rw-
Leitura e escrita
7
rwx
Leitura, escrita e execução

Suponhamos que pretendemos que o ficheiro tenha todas as permissões para o seu dono e nenhumas para o grupo e para os outros utilizadores. 

[marco@pweb _Temp]$ chmod 700 programa
[marco@pweb _Temp]$ ls -l
total 0
-rwx------. 1 marco marco 0 Sep  9 02:05 programa

Colocamos 700 (4+2+1, 0, 0), contemplando assim as operações de execução, leitura e escrita em todos os utilizadores. 
Vejamos agora qual o comando a executar para que o dono do ficheiro tenha todas as permissões, o grupo apenas possa ler e executar, e todos os restantes utilizadores apenas executar. 

[marco@pweb _Temp]$ chmod 751 programa
[marco@pweb _Temp]$ ls -l
total 0
-rwxr-x--x. 1 marco marco 0 Sep  9 02:05 programa

4.19.2012

Instalar Webmin CentOs 5.xx

Para instalar e efectuar o update do Webmin via RPM, crie o ficheiro /etc/yum.repos.d/webmin.repo e adicione o seguinte texto:

[Webmin]
name=Webmin Distribution Neutral
#baseurl=http://download.webmin.com/download/yum
mirrorlist=http://download.webmin.com/download/yum/mirrorlist
enabled=1


Instale a chave GPG com o comando

rpm --import http://www.webmin.com/jcameron-key.asc

Agora poderá efectuar a instação com o comando

yum install webmin


Todas as depências deverão ser efectuadas automaticamente.

Após instalação deverá configurar a firewall editando vi /etc/sysconfig/iptables

e adicionando

-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 10000 -j ACCEPT

 Reeninicie o iptables com service iptables restart

Nota: Para ativar acesso https

yum install perl-Net-SSLeay 

Activar na interface

Cisco VPN IPsec site-to-site

Notas prévias: Este artigo tem como função ser uma mera introdução à configuração de VPN’s IPsec site-to-site em Routers Cisco, sendo efectuada uma descrição sucinta sobre as tecnologias e protocolos utilizados. Refira-se que actualmente a utilização da interface gráfica (SDM)dos routers Cisco mais recentes, facilita imenso a configuração de VPN’s No entanto, na vida real poderão existir equipamentos mais antigos e sem SDM instalado, sendo necessário recorrer ao CLI. Nessa eventualidade a informação contida neste artigo poderá ser útil. 

Actualmente uma parte significativa da força laboral das empresas encontra-se fora das respectivos locais de trabalho. Como tal, o acesso a recursos por parte dos funcionários que não se encontram na empresa tornou-se indispensável. Antigamente uma série de Tecnologias Wan era utilizadas para garantir acesso remoto ( linhas dedicadas em Redes ATM, Frame Relay...).
Devido ao aumento da largura de banda disponível, tornou-se entretanto possível utilizar a Internet através das VPN’s, estabelecendo-se ligações seguras e confiáveis que garantem igualmente  acesso a recursos de forma segura e confiável. Um funcionário poderá utilizar um software no seu portátil, tablet ou smartphone para estabelecer uma VPN road-warrior a um dispositivo servidor ou concentrador de VPN’s localizado na  empresa.

Há situações que exigem uma ligação permanente entre dois locais, por exemplo, para interligar várias delegações de uma empresa - VPN site-to-site. Nesse caso os computadores das delegações terão conectividade IP permanente sem a necessidade de instalar e configurar software específico nos mesmos para o efeito.

Para configurar uma VPN site-to-site, com equipamentos Cisco, necessitamos de ter nas respectivas delegações um equipamento com suporte para VPN’s para estabelecer um Túnel entre os dois pontos ( Túnel IPsec [IP security] e/ou GRE [Generic Router Encapsulation Tunnel]), e de uma ligação de Banda Larga com atribuição de IP’s fixos ( no caso de um Router, deverá verificar versão do IOS e respectivas funcionalidades. A partir da versão 15.0 do IOS necessitará de licenciamento específico  para garantir o suporte a VPN’s) . Relembre-se que uma VPN permite estabelecer uma ligação segura num meio intrínsecamente inseguro como é a Internet. Para tal, diferentes tecnologias ( IPsec, GRE, L2TP e L2F) existem, oferecendo diferentes funcionalidades. No caso do IPsec, garantimos:

  • Confidencialidade  através da encriptação dos dados.
  • Integridade, assegurando-se que os dados não são alterados quando em trânsito.  
  • Autenticação, assegurando-se que ambos os pontos da VPN garantem mutuamente  a sua identidade.  O IPsec tornou-se uma Tecnologia VPN muito atraente e largamente utilizada porque actua na camada 3 do modelo OSI  sendo assim transparente para as aplicações visto estas não necessitarem de nenhum suporte específico. 
Refira-se que a tecnologia IPsec utiliza uma suite de protocolos. Um dos mais importantes é o IKE - Internet Key Exchange. Tal garante que os pontos de uma ligação VPN com tecnologia IPsec troquem periodicamente chaves encriptadas para se autenticarem. O IKE permite que um administrador configure manualmente as chaves pretendidas.

Existem 3 modos de operação no IKE:
  • Principal:   Um dos pares, o iniciante, envia um pedido ao outro par com uma proposta de ligação que inclui  a encriptação suportada, protocolos de autenticação,  tempo de duração das chaves e a obrigatoriedade ou não de utilizar PFS ( Perfect forward secrecy). O PFS garante que uma sessão permanece segura mesmo que uma das chaves privadas trocadas entre os pares seja comprometida. O par que responde escolhe uma das propostas recebidas e é criada, através do algorítmo Diffie-Hellman (DH), uma chave segura, estabelecendo-se assim uma sessão ISAKMP ( Internet Security Association and Key Management Protocol). 
  • Agressivo: São conseguidos os mesmos resultados apenas com a troca de 3 pacotes entre os pares.  O primeiro pacote contém a informação necessária para estabelecer a associação SA ( security association), sendo enviado pelo par que inicia a ligação. Como resposta é enviado um segundo pacote com os parâmetros escolhidos pelo par que responde ao pedido. O terceiro pacote é então enviado pelo iniciador, formalizando a autenticação  da sessão ISAKMP.  
  • Rápido: a associação é feita (SA) sem a acção do ISAKMP. O IKE reflecte as duas primeiras fases do estabelecimento de um túnel IPsec:
Na fase 1, uma sessão ISAKMP segura é estabelecida, onde a troca de uma série de parâmetros é  consagrada com vista à associação entre os pares SA - security association. Esta fase é considerada bidireccional o que significa que a mesma chave é trocada entre os pares para transmitir dados.

A fase 2 ocorre com a  protecção da túnel estabelecido na fase 1, utilizando-se para o efeito o modo rápido anteriormente descrito. Nesta fase as negociações SA são unidirecionais o que significa que cada troca de dados utiliza uma chave diferente.  Um túnel IPsec pode-se estabelecer com o recurso às fases IKE 1 e 2. No entanto uma fase opcional IKE  1.5 pode ser utilizada. Essa fase utiliza o protocolo XAUTH ( Extended Authentication Protocol) para autenticar túneis IPsec.  Para autenticação de utilizadores esta fase providencia uma camada adicional de autenticação em que parâmetros IP, DNS, WINS, etc.,  poderão são fornecidos.

Para além do IKE, que estabelece o Túnel, o IPsec recorre ao AH (Authentication Header protocol) e ao ESP (Encapsulating Security Payload ) para assegurar que os pares são autênticos e que os dados não são modificados. Contudo apena o ESP encripta os pacotes ao contrário do AH que não oferece qualquer serviço de encriptação. Como tal o ESP é o protocolo utilizado escolhidos pelos Administradores de Redes.

O ESP, assim como o AH, podem ser utilizados em modo de Túnel ou em modo de Transporte:

Modo de Transporte: É utilizado o cabeçalho do pacote IP original ao invés de ser adicionado um cabeçalho extra de túnel. Esta abordagem evita o aumento do pacote sendo a opção a considerar em cenários onde tal possa constituir um problema. Esta opção é utilizada normalmente em VPN’s road-warrior.

Modo de Túnel: Neste modo o pacote é totalmente encapsulado ficando com um cabeçalho IPsec. Esse cabeçalho contém informação sobre o IP de origem e destino de ambos os pares da VPN. Este é o modo mais utilizado em VPN’s site-to-site.

Nota: Aparentemente pode-se depreender que o modo de Transporte permite a visibilidade do pacote IP em trânsito. Tal não sucede, porque normalmente o IPsec é utilizado em conjunção com o GRE. Nesse cenário o pacote original é inicialmente encapsulado num pacote GRE  sendo adicionado um cabeçalho GRE e só após é que o pacote resultante é enviado no túnel IPsec. Assim sendo, mesmo em modo de Transporte, o cabeçalho IP original não é visível. Tal situação pode ser encarada como uma limitação do IPsec. Relembre-se que um túnel  IPsec apenas transmite tráfego unicast. Em grandes Redes empresariais poderá existir a necessidade de permito tráfego Multicast e Broadcast ( protocolos de roteamento como o OSPF), como tal, o encapsulamento do pacote original de multicast em GRE e o seu envio no Túnel IPsec garantirá  a sua correcta transmissão.   

Recomendações a ter em conta na implementação de VPN’s IPsec 
  • O design de VPN’s IPsec deverão assegurar mecanismos que permitam que os dispositivos intervenientes sejam segura e correctamente identificados/autenticados. As VPN’s IPsec podem usar chaves pré-partilhadas ou certificados digitais para a autenticação. 
  • Os equipamentos de terminação VPN em cada um dos lados do túnel devem ser configurados com chaves pré-partilhas utilizando o algoritmo Diffie-Hellman.
  • Grupos de chaves pré-partilhadas e chaves generalistas devem ser evitadas em VPN’s site-to-site. Os certificados digitais tem melhor escalabilidade se utilizarem chaves pré-partilhadas, devendo como tal ser utilizados em Redes com mais de 20 dispositivos. 
  • Como os certificados digitais têm um determinado tempo de associação  deverá ser assegurada uma correcta sincronização. 
  • É preferível proteger Certificados digitais e chaves pré-partilhadas recorrendo a uma solução baseada em hardware como oposto a uma solução, menos segura, baseada em software. Utilizar sempre  ESP em VPN’s IPsec para garantir integridade e encriptação em oposição ao protocolo AH (alguns equipamentos Cisco deixaram de o suportar). 
  • Usar sempre algoritmos fortes para encriptação ( 3DES e AES). Não utilizar DES
  • Usar sempre SHA como algoritmo de hashing. Não utilizar MD5.
  •  Pode aumentar o nível de segurança do SA utilizando PFS. Tal só é recomendado em informação muito sensível e com equipamento adequado visto que o impacto no processamento é grande. 
  • Evitar a utilização de NAT em VPN’s IPsec. Só se justifica a sua utilização se existirem Redes privadas com o mesmo endereçamento. Para redes de média e grande dimensão optar por equipamento dedicado.


Existem 5 passos no estabelecimento de uma VPN IPsec site-to-site (ver figura)
  • O PC1 envia tráfego destinado para o PC2. 
  • O Router1 classifica o tráfego como interessante originando a criação de um túnel IPsec. 
  • O Router1 e o Router2 negoceiam a associação (SA) utilizada para formar uma fase IKE 1 também chamado túnel  ISAKMP.
  •  A fase IKE 2, também conhecida como túnel IPsec é estabelecida. Depois de estabelecido o túnel o tráfego é encaminhado.  
  •  Não sendo enviado tráfego interessante durante um determinado período de tempo a SA é eliminada e o túnel caí. 
Para configurar uma VPN IPsec site-to-site utilizado o CLI deve-se atender aos seguintes passos fundamentais. 
  • Definição dos parâmetros a serem utilizados na fase 1 IKE ( túnel ISAKMP). 
  • Definição dos parâmetros a serem utilizados na fase 2 IKE ( túnel IPsec) ou definição do transform set. 
  • Criação de uma ACL que define o “tráfego interessante” que deverá ser enviado pelo túnel IPsec.
  •  Criação de um crypto map que não é mais do que agrupar logicamente os passos anteriormente configurados e aplicá-los a uma interface de um par IPsec. 
  • Opcionalmente configurar ACL’s adicionais que impeçam tráfego não interessante de atravessar o túnel. 



Considere-se a configuração de uma VPN IPsec site-to-site entre os dois Routers especificados na figura anterior. As redes 10.1.1.0/24 e 192.168.0.0/24 deverão ter conectividade IP.

Definição dos parâmetros a serem utilizados na fase 1 IKE ( túnel ISAKMP). 


Router1

Router1# conf terminal
Router1(config)# crypto isakmp policy 1
Router1(config-isakmp)# authenttication pre-share
Router1(config-isakmp)# hash sha
Router1(config-isakmp)# encryption aes 128
Router1(config-isakmp)# group 2
Router1(config-isakmp)# lifetime 8640
Router1(config-isakmp)# exit
Router1(config)# crypto isakmp key Pa$$word address 172.30.2.2
Router1(config)# end
Router1#

Router2

Router2# conf terminal
Router2(config)# crypto isakmp policy 1
Router2(config-isakmp)# authenttication pre-share
Router2(config-isakmp)# hash sha
Router2(config-isakmp)# encryption aes 128
Router2(config-isakmp)# group 2
Router2(config-isakmp)# lifetime 8640
Router2(config-isakmp)# exit
Router2(config)# crypto isakmp key Pa$$word address 172.30.2.1
Router2(config)# end
Router2#

Descrição dos comandos:

crypto isakmp policy 1 - Entra em modo de configuração ISAKMP

authenttication pre-share - Escolha dométodo de chaves pré-partilhadas para o processo de autenticação.

hash sha - Especifica que o algoritmo de hashing a utilizar é o SHA (Secure Hash Algorithm)

encryption aes 128 - Específica que o  algoritmo AES de 128 bits vai ser utilizado para encriptação.

group2 - Define que o algoritmo Diffie-Hellman Group 2 vai ser utilizado para tornar segura a troca de chaves entre os pares.

lifetime 8640 - Tempo de duração da associação segura (SA) em segundos.

crypto isakmp key Pa$$word address 172.30.2.1 - Define a chave partilhada a ser utilizada com o outro par ( Endereço do Router2 no Router 1 e vice-versa).

 Definição dos parâmetros a serem utilizados na fase 2 IKE ( túnel IPsec) ou definição do transform set.

Router1# conf term
Router1(config)# crypto ipsec transform-set MYSET esp-aes esp-sha-hmac
Router1(cfg-crypto-trans)# exit
Router1(config)# access-list 101 permit ip 10.1.1.0 0.0.0.255 192.168.0.0 0.0.0.255
Router1(config)# crypto map ROUTER1_TO_ROUTER2 10 ipsec-isakmp
Router1(config-crypto-map)# set peer 172.30.2.2
Router1(config-crypto-map)# match address 101
Router1(config-crypto-map)# set transform-set    MYSET
Router1(config-crypto-map)# exit
Router1(config)# exit
Router1#

Router2# conf term
Router2(config)# crypto ipsec transform-set MYSET esp-aes esp-sha-hmac
Router2(cfg-crypto-trans)# exit
Router2(config)# access-list 101 permit ip 192.168.0.0 0.0.0.255 10.1.1.0 0.0.0.255
Router2(config)# crypto map Router2_TO_ROUTER1 10 ipsec-isakmp
Router2(config-crypto-map)# set peer 172.30.2.1
Router2(config-crypto-map)# match address 101
Router2(config-crypto-map)# set transform-set MYSET
Router2(config-crypto-map)# exit
Router2(config)# exit
Router2#

Descrição dos comandos:

crypto ipsec transform-set MYSET esp-aes esp-sha-hmac - Especifica o algoritmo de encriptação e o algoritmo de hash a serem utilizados.

access-list 101... - Define o tráfego a ser protegido pelo túnel IPsec.

crypto map … - Criação do crypto map onde é definido o endereço IP do outro par, onde é feita a associação com a ACL 101 previamente criada, e agregado o transform set MYSET também anteriormente criado.

Aplicação do crypto map

Router1# conf term
Router1(config)# interface serial 1/0
Router1(config-if)# crypto map ROUTER1_TO_ROUTER2
Router1(config-if)# end
Router1(config)# ip route 192.168.0.0 255.255.255.0 172.30.2.2
Router1(config)# end
Router1#

Router2# conf term
Router2(config)# interface serial 1/0
Router2(config-if)# crypto map Router2_TO_ROUTER1
Router2(config-if)# end
Router2(config)# ip route 10.1.1.0 255.255.255.0 172.30.2.1
Router2(config)# end
Router2#

Descrição dos comandos.

Neste caso aplicamos a crypto map às respectivas interfaces dos 2 equipamentos. Note-se a criação de uma rota estática que aponta para o IP do outro par em cada um dos Routers.

Para testar a conectividade IP da VPN IPsec site-to-site, comece-se por efectuar um ping à Interface LAN do outro par que deverá ser bem sucedido.

Os comandos show crypto engine connections active and show crypto session permitirão verificar os parâmetros da configuração.

Router1# show crypto engine connections active

Crypto Engine Connections
  ID Interface  Type  Algorithm           Encrypt  Decrypt IP-Address
   1 Se1/0      IPsec AES+SHA                   0        4 172.30.2.1
   2 Se1/0      IPsec AES+SHA                   4        0 172.30.2.1
1001 Se1/0     IKE   SHA+AES                0        0 172.30.2.1

Referências:

CCNA Security Official Exam Guide

Links:

IPsec RFC: http://tools.ietf.org/html/rfc6071
IPsec: http://pt.wikipedia.org/wiki/IPsec
GRE: http://en.wikipedia.org/wiki/Generic_Routing_Encapsulation
Diffie-Hellman: http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
MD5: http://pt.wikipedia.org/wiki/MD5
SHA: http://pt.wikipedia.org/wiki/SHA
DES: http://pt.wikipedia.org/wiki/DES
AES:http://en.wikipedia.org/wiki/Advanced_Encryption_Standard