quinta-feira, 7 de abril de 2011

ProFTPd (Instalando e Configurando)

Estamos de volta com nosso tutorial sobre Redes de Computadores no FreeBSD, e hoje falaremos sobre ProFTPd.

O ProFTPd é um software que provê serviço de FTP de forma bastante eficiente e tem como característica a segurança e flexibilidade, ou seja, altamente configurável. Ele possui muitas vantagem e, por isso, ´muito utilizado em sites de grande tráfego.

Dentre essas vantagens podemos destacar como principais:
  • configuração fácil;
  • pode ser configurado em modo standalone ou através do inetd;
  • o PID é executado por um usuário desprivilegiado (nobody);
  • formato do arquivo de log extremamente configurável;
  • fácil administração do FTP, com relação a forma de restrição, acesso aos arquivos;
  • permite a configuração do número máximo de processos em execução, minimizando vulnerabilidades;
Iremos explicar agora, passo-a-passo, a instalação e configuração do ProFTPd.

Instalação:

1º)  No terminal de comandos do FreeBSD, instale o proftpd tilizando o comando abaixo:


# cd /usr/ports/ftp/proftpd && make install clean


/*Esse comando irá baixar o código fonte via FTP, que será compilado, permitindo assim a instalação*/


2º) Logo após isso será exibida a tela abaixo:





Selecione as seguintes opções:


  • IFSESSION                                             Include mod_ifsession 
  • README                                               Include mod_readme 
  • RATIO                                                   Include mod_ratio 
  • REWRITE                                             Include mod_rewrite 
  • WRAP                                                   Include mod_wrap

3º) Clique em "OK" para concluir a instalação.

Pronto! Seu ProFTPD está instalado, pronto para ser utilizado! Digo...quase. Antes, é necessário configurá-lo.

Configuração:

  •  Tendo instalado o ProFTPD, entre no arquivo de configuração que fica no seguinte caminho:

/usr/local/etc/proftpd.conf

aparecerá a seguinte tela:




Nela você encontrará as seguintes informações:
----------------------------------------------------------------------------------------------
# Arquivo que exibira' a mensagem de boas vindas no momento da conexao.
DisplayConnect /usr/local/etc/proftpd.banner # Edite este arquivo para sua mensagem personalizada

# Não exibe informacoes sobre que tipo de servidor esta' rodando, boa pratica de seguranca.
ServerIdent off

# Modo no qual o servidor ira' rodar (standalone ou inetd), standalone tem melhor desempelho.
ServerType standalone

# Como nao temos VirtualHosts, este servidor (principal) sera' o padrao.
DefaultServer on

# Porta para o socket de controle.
Port 21

# Umask padrao para arquivos uploaded
Umask 022

# Maximo de processos filho (cada conexao utiliza um processo)
MaxInstances 30

# Maximo de usuarios autenticados (incluindo anonimos) e mensagem
MaxClients 20 "Desculpe, mas o numero maximo de clientes foi atingido. Tente mais tarde."

# Maximo de usuarios autenticados (incluindo anonimos) por IP
MaxClientsPerHost 4 "Desculpe, mas o maximo de 4 conexoes por cliente foi atingido. Tente mais tarde."

# Usuario sob o qual o servidor ira rodar, criado automaticamente na instalacao.
User ftp

# Grupo sob o qual o servidor ira rodar, criado automaticamente na instalacao.
Group ftp

# Os usuarios nao poderao sair de seu diretorio home (chrooted).
DefaultRoot ~

# Nao permite o login do usuario root, você pode habilitar essa opção, mas nao e' uma boa pratica de seguranca.
RootLogin off

# Nao requer que os usuarios tenham um shell valido (definido em /etc/shells).
RequireValidShell off

# Nao bloqueia usuarios baseando-se no arquivo /etc/ftpusers.
UseFtpUsers off

# Tempo maximo em segundos para login.
TimeoutLogin 120

# Tempo maximo em segundos conectado mas sem qualquer comando ou troca de dados.
TimeoutIdle 600

# Tempo maximo em segundos sem transferencia de dados (arquivos, listagens de diretorios).
TimeoutNoTransfer 900

# Tempo maximo em segundos com uma transferencia parada, travada.
TimeoutStalled 900

# Numero maximo de tentativas de login.
MaxLoginAttempts 3

# Nao tenta descobrir o hostname do cliente.
UseReverseDNS off

# Nao tenta efetuar consulta do username remoto (ident - RFC1413).
IdentLookups off

# Arquivo de log geral.
SystemLog /var/log/proftpd/system.log

# Arquivo de log das transferencias.
TransferLog /var/log/proftpd/transfer.log

# Especifica o modo de transferencia padrao (ascii ou binary).
DefaultTransferMode binary

# Permite que arquivos sejam sobrescritos (caso seja feito upload de um arquivo ja existente).
AllowOverwrite on

# Abre o contexto de usuarios anonimos, especificando a raiz do FTP anonimo.


# Usuario sob o qual cada instancia de FTP anonimo deve rodar
User ftp

# Grupo sob o qual cada instancia de FTP anonimo deve rodar
Group ftp

# Define o login anonymous como sinonimo (alias) do login ftp
UserAlias anonymous ftp

# Numero maximo de usuarios anonimos
MaxClients 10

# Limita qualquer gravacao neste contexto (por exemplo upload de arquivo)

DenyAll

# Fecha o contexto de usuarios anonimos

----------------------------------------------------------------------------------------------

  • Procure no arquivo os campos "user" e "group" e troque o "nobody" e "nogroup" por "ftp"

  • Troque os valores:

    #<Anonymous ~ftp>
    #User nobody
    #Group nogroup

    Para

    <Anonymous /usr/ftp>
    User ftp
    Group ftp
Para configurar o ftp anônimo execute o comando "sysinstall". Aparecerá a seguinte tela:



  • Selecione as opções:
configure=> networking
  • Irá aparecer outra tela com opções. Habilite a opção: anon ftp
  • Será perguntado se você deseja configurar o ftp anônimo. Secione: "YES"
  • Aparecerá uma tela como abaixo. Não altere nada e clique em "OK".

  •  O assistente irá perguntar se voce deseja configurar ma mensagem personalizada para qem logar como anônimo, escolha "yes".
  • Digite uma mensagem, salve e saia do editor de texto.
  •  Após sair, você verá a seguinte tela:



  •  Selecione "exit" e tecle "enter". (Será necessário fazer isso 2 vezes)
  •  Tecle "seta para direita" e selecione "Exit Install"

  • Para configurar o ip digite o seguinte comando:
#ee /etc/hosts
  • Crie uma linha no final do arquivo que contenha o ip do seu computador e o nome dele.

  • Para iniciar o ProFTP no boot.  Digite a seguinte linha de comando
#ee/etc/rc.conf
  • Adicione ao fim do arquivo a linha:
    proftpd_enable="YES"
Pronto! Agora sim seu ProFTPD está instalado, configurado e pronto para o uso.

Iniciando e parando o serviço de FTP:


  • Para inicializar digite o seguinte comando:
# /usr/local/etc/rc.d/proftpd.sh start

  • Para finalizar digite:
/usr/local/etc/rc.d/proftpd.sh stop

Outros comandos úteis:

ftpcount -> mostra o número atual de conexões ao servidor FTP
ftpwho -> mostra quais usuários estão conectados atualmente
ftptop -> mostra informações sobre as conexões num estilo parecido ao do comando top
ftpshut -> tira o servidor FTP do ar, sem encerrar seu processo. Para retornar, deve-se executar "ftpshut -R"

//==========================================================

Bem. Esperamos ter ajudado você a entender melhor o processo de instalação e configuração do ProFTPD. Em breve virão novas postagens. Aguarde.

//==========================================================


Bibliografia:

http://www2.unijui.edu.br/~heini/freebsd/proftpd.html
http://robertors.blogspot.com/2006/08/freebsd-instalando-proftpd.html
http://www.vivaolinux.com.br/artigo/Configuracao-do-ProFTPd

quinta-feira, 10 de março de 2011

Roteamento (FreeBSD)

Introdução

Vamos começar do início. A internet surgiu... Tá, nem tão do início assim. Vou começar explicando o conceito de REDE e INTERNET. É denominada rede de computadores a união de 2 ou mais computadores ou dispositivos ligados de forma física e lógica permitindo a troca de informações entre eles. Para exemplificar, imagine uma empresa. O gerente precisa de um de um documento que vem de outro setor que fica distante da sua sala. Se ele tiver que ir até lá para pegar pessoalmente, gastará tempo e esforço. Nessa mesma empresa, em um determinado setor muitos funcionários precisam usar a unica impressora do local. Se cada um levar um documento para o computador ligado a impressora através de um CD ou pendrive, também será gasto um tempo precioso (sem falar que seria muito chato). Com todas essas máquinas conectadas entre si em uma rede, o trabalho se torna mais prático e rápido.
Já a internet é um conjunto de diversas redes inter-conectadas através de pontos de acesso chamados de roteadores.
Roteamento
Para uma máquina ser capaz de encontrar outra através de uma rede e haver troca de informações é necessário um mecanismo que direcione os dados uma para a outra. Isto é chamado roteamento. Uma rota é um par definido de endereços: um destino e um gateway . O par indica que se você estiver tentando alcançar este destino, deve se comunicar através deste gateway. Existem três tipos de destinos: máquinas individuais, subredes e padrão . A rota padrão é usada se nenhuma das outras rotas for aplicável. Também existem três tipos de gateways: máquinas individuais, interfaces (também chamadas de enlaces ) e endereços físicos de hardware Ethernet (endereços MAC).

Habilitar Encaminhamento de Pacotes 

    Para configurar o FreeBSD como roteador em uma rede pequena, basta habilita-lo como gateway, configurar uma rota default e, em alguns casos, criar uma tabela estática de roteamento.
    Em redes maiores pode ser necessário o uso de protocolos de roteamento, como o RIP, que gerenciem, de modo dinâmico, a tabela de roteamento de seu servidor.

Tabela de Roteamento

Agora iremos abordar a configuração de uma rota default e a criação de uma tabela de roteamento no FreeBSD.
Primeiramente deve-se utilizar o comando netstat, que permite visualizar a tabela de roteamento do FreeBSD.
Para visualizar a tabela de roteamento, você deverá utilizar o comando netstat associado ao parâmetro -r.
Por exemplo, ao executar o comando netstat -r, você terá algo parecido com:

# netstat -r

Routing tables

Internet:
Destination        Gateway            Flags     Refs     Use     Netif Expire
localhost              localhost            UH          0        6       lo0
default              200.132.10.2        UG          0        0      ppp0

Então, vamos começar:

1) Habilite o FreeBSD para atuar como gateway, editando o arquivo /etc/rc.conf alterando as seguintes linhas:

gateway_enable="NO"                         # Set to YES if this host will be a gateway.
paragateway_enable="YES"                # Set to YES if this host will be a gateway.

2) Após alterar salve o arquivo. Para efetivar esta alteração voce deverá dar um boot em seu servidor, deixe para fazê-lo, após configurar os demais itens.

3) Configure a rota default. para fazer isso no FreeBSD, edite o arquivo /etc/rc.conf e altere a linha:defaultrouter="NO" # Set to default gateway (or NO).
paradefaultrouter="IP_do_gateway_default" # Set to default gateway (or NO).

4) Especifique o IP ou o hostname do gateway default.

5) Após alterar, salve o arquivo. Para efetivar essa alteração será necessário efetuar um boot em seu servidor. Supondo que o default gateway possua o IP 200.132.10.2, se você utilizar o comando netstat para verificar a tabela de rotamento do FreeBSD após o boot, ela seria algo do tipo:

# netstat -r

Routing tables

Internet:
Destination        Gateway            Flags     Refs     Use     Netif Expire
localhost             localhost             UH           0        6                lo0
default               200.132.10.2       UG          0        0              ppp0
192.16.13.0        192.16.12.3        UG          0        0              ed0

Como Definir Rotas Estáticas

O comando utilizado para manipular manualmente a tabela de roteamento do FreeBSD é o comando route. Por exemplo para adicionarmos uma rota para a rede 192.16.13.0 sendo que o gateway para esta rede é o host 192.16.12.3 a sintaxe do comando seria:

# route add 192.16.13.0/24 192.16.12.3

Após a execução do comando acima a tabela de roteamento mostrada anteriormente ficaria assim:

# netstat -r

Routing tables

Internet:
Destination             Gateway            Flags      Refs     Use     Netif Expire
loca l                 lhost localhost         UH           0        6             lo0
default               200.132.10.2          UG           0        0             ppp0
192.16.13.0      192.16.12.3            UG           0        0             ed0 

Você pode definir rotas estaticas adcionando essas linhas no arquivo  /etc/rc.conf:
 
static_routes="administracao"
route_administracao="-net 192.168.1.0/24 10.10.1.1"
Existe tambem  outra forma de definir suas rotas estaticas em /etc/rc.conf. Veja:

static_routes="rh"
route_rh="-net 192.168.2.0/24 10.10.2.1"





Exemplo de configuração de rede
Em uma empresa temos dois departamentos: O administrativo e o Recursos Humanos. Cada um possui uma rede interna do departamento mas prescisam compartilhar arquivos e recursos entre essas redes. Todas as estações de trabalho estão no FreeBSD e cada uma contém apenas uma interface de rede. Como poderiamos conectar essas redes?
  • Primeiro: devemos definir a faixa de IPS de cada rede e confgigura-las separadamente. Usaremos para o ADM a faixa 192.168.1.x e para o RH 192.198.2.x;
  • Segundo: Escolha uma maquina em cada rede para ser o gatway, por questão de organização escolheremos 192.168.1.1 para gatway de ADM e 192.168.2.1 para gatwayde RH;
Em cada estação de trabalho se deve-se configura-las na rede alterando o arquivo /etc/rc.conf.
ADM:
#ee /etc/rc.conf  (Adicionar as seguintes linhas no fim do arquivo)
ifconfig_rl0="inet 192.168.1.2 netmask 255.255.255.0"
defauterouter="192.168.1.1"

//PCs RH

#ee /etc/rc.conf  (Adicionar as seguintes linhas no fim do arquivo)
ifconfig_rl0="inet 192.168.2.2 netmask 255.255.255.0"
defauterouter="192.168.2.1"

**Atenção... O FreeBSD reconhece a interface de rede pelas iniciais do fabricante. No nosso caso é uma RealTek, por isso rl0! procure mais informações de como ele pode reconhecer sua placa de rede e se for diferente é só substituir no codigo... você pode dar o comando ifconfig e ver.
**Cada maquina deve ter o ip diferente!!! altere a cada maquina o ultimo numero...!  Mas cuidado.... Os IPS termiandos em 0 (ex: 192.168.1.0) representam o endereço de rede e o s terminados em 255 (ex: 192.168.2.255) representam o endereço de loopback... esses são reservados e não podem ser associados a nenhuma maquina.

Ex para o pc 2 da rede RH
#ee /etc/rc.conf  (Adicionar as seguintes linhas no fim do arquivo)
ifconfig_rl0="inet 192.168.2.3 netmask 255.255.255.0"
defauterouter="192.168.2.1"
e assim sucessivamente até todas as maquinas tiverem um endereço IP destinto.
Configurando o Gatway usando alias
   Voce deve estar se perguntando... como posso usar um gatway com apenas uma interface de rede? O FreeBSD nos dá uma possibilidade de utilizar uma interface virtual chamada de ALIAS. Isso mesmo, com o alias temos a impressão de que temos duas interfaces de rede. Vamos então para a configuração do gatway usando o alias??
Da mesma forma deve-se alterar o arquivo /etc/rc.conf
Vamos usar o IP 10.10.1.1 Para a interface de rede  e o 192.168.1.1 para o alias
//GATWAY ADM
#ee /etc/rc.conf
gatway_enable=”YES”  (Atenção o YES deve ser sempre em MAIUSCULO)
ifconfig_rl0=”inet 10.10.1.1 netmask 255.255.255.0”
ifconfig_rl0_alias0=”inet 192.168.1.1 netmask 255.255.255.0”
//GATWAY RH

#ee /etc/rc.conf
gatway_enable=”YES”  (Atenção o YES deve ser sempre em MAIUSCULO)
ifconfig_rl0=”inet 10.10.2.1 netmask 255.255.255.0”
ifconfig_rl0_alias0=”inet 192.168.2.1 netmask 255.255.255.0”





Quando se adiciona as rotas estáticas, indica-se a rede na qual quer conectar (Rede ADM para a Rede RH adciona a rota para a rede 192.168.2.0 pois o endereço terminado em zero representa toda a rede),  a mask que aqui está representada como /24 e o IP válido do Gatway da outra rede (no caso, o IP do Gatway de RH é 10.10.2.1), pois é por ele que todas as informações da rede passarão. Então agora abaixo adicionaremos as rotas estáticas no arquivo /etc/rc.conf:

static_routes="administracao"
route_administracao="-net 192.168.1.0/24 10.10.1.1"
 
static_routes="rh"
route_administracao="-net 192.168.2.0/24 10.10.2.1" 

/*Espero ter ajudado*/




Programa


Aqui tem o código fonte de um programa que irá configurar automaticamente o IP, Gateway, Rota Default, listar e adcionar rotas estáticas e Habilitação de roteamento .
#include<stdio.h>
#include<stdlib.h>
main()
{
     char ip[20],ipd[20],mask[20],mask1[20],var[50],gt[20],gt1[20],var1[50],var2[50];
     int op;

     while (op!=6)
     {      /*Aqui você coloca as opções de configuração que o usuario porerá escolher*/
     printf("\nDigite a opção que desejas:\n");
     printf("\n1.Configurar a interface de Rede\n");
     printf("\n2.Configurar a Rota Padrao\n");
     printf("\n3.Listar a Tabela de rotas\n");
     printf("\n4.Habilitar roteamento\n");
     printf("\n5.Adicionar rota estática\n");
     printf("\n6.Sair\n");
     scanf("%d",&op);
     switch (op)
     {
     case 1:
          printf("\n Configurar a interface de Rede \n");
          printf("Digite o IP:");
          scanf("%s",&ip); //Salva o IP digitado na variável ip
          printf("Digite a Mascara:");
          scanf("%s",&mask);/*Salva a MASK digitado na variável mask*/
          sprintf(var,"ifconfig rl0 %s netmask %s", ip, mask);
/*Aqui adicona toda a sintaxe do comando ifconfig dentro da variavel var, já inserindo os dados informados pelo usúario*/
          system(var);
/*O system serve para executar no console o valor da variavel, que no caso já é o comando completo de configuração da interface de rede*/
     break;
     case 2:
          printf("\nConfigurar a Rota Padrao\n");
          printf("Digite o Gateway:");
          scanf("%s",&gt);/*Salva o GATWAY digitado na variável gt*/
          sprintf(var1,"route add default %s",gt);
/*Aqui adicona toda a sintaxe do comando route add dentro da variavel var, já inserindo o dado informados pelo usúario*/
          system(var1);
/*O system serve para executar no console o valor da variavel, que no caso já é o comando completo de configuração de rota padrão */
     break;
     case 3:
          printf("\nLista de Rotas\n");
          system("netstat -rn");
/*O netstat -rn não precisa de mais nenhum parâmetro, por isso que system irá executar no console diretamente, e assim listar as rotas */

     break;
     case 4:
         printf("\nHabilitar Roteamento\n");
          system("sysctl net.inet.ip.forwarding=1");
/*Assim como o netstat -rn, o sysctl não precisa de mais nenhum parâmetro, por isso que system irá executar no console diretamente, e assim habilitar o reteamento */
     break;
     case 5:
          printf("\nAdicionar rota estática\n");
          printf("Digite o IP da rota:");
          scanf("%s",&ipd);/*Salva o IP da rota estática digitado na variável gt1*/
          printf("Digite a mascara:");
          scanf("%s",&mask1);/*Salva a MASK digitada na variável mask1*/
          printf("Digite o gateway:");
          scanf("%s",&gt1);/*Salva o GATWAY digitado na variável gt!*/
          sprintf(var2,"route add %s %s %s",ipd,gt1,mask1);
/*Aqui adicona toda a sintaxe do comando route add dentro da variavel var2, já inserindo os dados informados pelo usúario*/
          system(var2);
/*O system serve para executar no console o valor da variavel, que no caso já é o comando completo de adicionar rota estárica*/
     break;
    
     case 6:
     break;   
     default:
     printf("opcao invalida\n");
     break;
     }
     }

}
Para utilizá-lo você deve copia-lo em algum editor de texto no FreBSD (recomendamos o ee), salvar com a extenção .c e digitar os seguintes comandos para complilar seu código-fonte:

#ee 
#gcc -o <nome_do_codigo-fonte><nome_do_programa>
#./<nome_do_programa>


ex: você salvou o código com o nome programa.c e vai compliar em um programa chamado configuracao_redes


#gcc-o programa.c configuracao_redes
#./configuracao_redes


Bibliografia:
http://www.primeirospassos.org/sessao8_8.html
http://doc.fug.com.br/handbook/network-routing.html
http://interred.cefetce.br/cdd/
http://pt.wikipedia.org/wiki/Rede_de_computadores