Arquivo da categoria ‘Tutoriais’

Google Apps

Publicado: abril 29, 2008 em Tutoriais

Tutorial: GoogleApps
Autor: Fábio Rafael (moiza)
Email: moiza@bsd.com.br

Síntese:
E-mail (correio eletronico), ou ainda email é um método que permite compor, enviar e receber mensagens através de sistemas eletrônicos de comunicação.

Descrição:
E-mail é hoje a principal ferramenta de comunicação eletrônica de qualquer empresa ou organização com presença na Internet. Em muitos casos é o meio primário de comunicação. Segundo a consultoria americana Warner-Closhure & Associates, 80% das empresas de pequeno e médio porte dependem mais de correio eletrônico do que telefone ou correio convencional.

Necessidade:
Ter um serviço de email que fosse estável, rápido, seguro, fácil administração e tivesse um bom controle de spam, além de poder contar com um serviço de webmail com uma interface amigável onde o usuario pudesse navegar ou procurar suas mensagens nas caixas facilmente.

Uma vez migrado de Sendmail para Qmail, foi resolvido uma grande parte do problemas que tínhamos, como spam, vírus, worms, black lists, webmail, administração fácil, cota, etc, não pelo fato da ferramenta anterior não atender, e sim pelo conhecimento técnico e facilidades encontradas no uso da nova. Mas ai a organização resolveu que íamos utilizar um novo domínio, então resolvemos novamente criar um novo Servidor de Email do zero.

A idéia era criar um novo Qmail com todos paths possíveis de segurança contra vírus, cavalos de tróia, spywares e malwares; pretendíamos também utilizar o Webmail como padrão, não que fosse generalizado mas deixar de lado muitas das manutenções do cliente de email por exemplo o outook, eudora, thunderbird.

Mas ai veio a complexidade de instalar hardware, manutenção e configuração de software, backup e redundância, então ficava inviável armar essa estrutura toda para a quantidade de contas que seria usado, que no caso não passaria de 100 pois a organização achou melhor criá-las por departamentos.

Concordando com um depoimento feito por Evandro Nunes, Câmara de Comércio de Minas Gerais à FreeBSD Brasil que diz:”E-mail para nós é mais perceptível quando não funciona adequadamente do que navegação Web ou sistema de arquivos por exemplo. É crítico, imprecindível que esteja sempre no ar, em plena operação” foi seguindo este conceito que pesquisando na internet sobre DNS, EMAIL vi que a Google havia lançado o Google Apps com o seguinte enunciado “Deseja obter ferramentas de colaboração e comunicação simples e avançadas para a sua organização, sem os problemas e os custos usuais?” Isso me chamou a atenção e logo vi a grande possibilidade que o Google Apps poderia beneficiar.

E-mail essa foi a primeira coisa que analisei, uma capacidade de armazenamento muito boa, com ferramentas de pesquisa de mensagem e bate-papo integrado, ou seja, todos esses recursos que o Gmail tem, pra quem já é usuário conhece. Google Talk, Google Docs, Painel de controle para gerenciar o domínio e contas de usuários on-line. Tudo isso caiu como uma luva pois estava ali a solução ideal que precisávamos, o próximo passo foi avaliar todos os termos e documentação desse serviço e verificar até que ponto a aplicação gratuita poderia estar nos atendendo.

Implementação:
A primeira coisa a ser feita é conhecer os termos e ler toda documentação do Google Apps, inclusive suas Faq, assim é possível tirar praticamente todas as dúvidas em relação ao serviço, então avaliar se esta é mesmo a solução que sua organização precisa ter, analisar os pontos positivos e negativos dessa tecnologia e depois tirar a conclusão que esta aplicação poderá ajudar significativamente seus níveis de produtividade.

Pré-requisitos:
* Domínio existente ou registrar um novo.
* Ter acesso a configurações avançadas de DNS
– Se você não tiver adquirido um nome de domínio durante a inscrição em sua conta do Google Apps, as Configurações avançadas de DNS não vão ser exibidas em seu painel de controle.
– Se tiver adquirido um nome de domínio durante a inscrição em sua conta do Google Apps, você vai poder adicionar serviços ao seu domínio (como e-mail ou páginas da web) sem acessar suas Configurações avançadas de DNS. Em vez disso, seus serviços vão ser configurados automaticamente no painel de controle. Caso o seu domínio foi registrado em um dos parceiros de registro, a Google defini as configurações avançadas de DNS).
– Caso o registro do domínio não seja feito pelos parceiros, ou que foi feito mas desejar migrar pra um outro, será necessário que os registros MX sejam configurados corretamente com o novo host, poderá continuar usando o Google Mail em seu domínio. As mensagens antigas da sua conta não serão perdidas. Entretanto, se você usar outro nome de domínio, será necessário inscrever seu novo nome de domínio no Google Apps e criar novas contas de e-mail.

Instalação:
Acho que seria desnecessário documentar alguma coisa quanto a instalação dessa aplicação do Google Apps, pois o próprio site do Apps é riquíssimo em conteúdo, acesse as referências abaixo, e Saiba como o Google Apps pode beneficiar…

PS.: Em 17 de Abril, 2008 – Na lista da FUG-BR Patrick Tracanelli anunciou o uso do domínio http://www.BSD.com.br no Google Apps, apontando para um iGoogle e com links para as principais referências (introdutórias) a sistemas BSD – Além de qualquer membro da comunidade pode agora ter um e-mail @bsd.com.br, nos padrões do gmail, e de quebra ajuda a divulgar o domínio e consequentemente a linhagem de sistemas BSD.
Taí, mais uma solução implementada do Google Apps.
Acesse o site e confira as organizações do mundo todo contarem suas histórias de sucesso, vale a pena.

Referências:
http://www.google.com/a/
http://pt.wikipedia.org/

VsFTPD

Publicado: abril 28, 2008 em Tutoriais

Tutorial: VsFTPD
Autor: Fábio Rafael (moiza)
Email: moiza@bsd.com.br

Necessidade:
Precisávamos ter um Servidor para Transferência de Arquivo, um método típico de cópia de arquivos entre dois sites Internet para ser utilizado para transferir arquivos com tamanhos superiores à 10MB, pois muitos provedores e serviços não permitem o envio e o recebimento de arquivos com tamanho superior a 10MB. Existem muitos repositórios públicos de programas de computador e documentos espalhados pela Internet usando este tipo de aplicação.

Síntese:
‭‬Armazenar arquivos em diretórios,‭ ‬permitindo o seu download‭ (‬recepção‭) ‬e o upload‭ (‬envio‭) ‬de novos arquivos.

Descrição:
‭Este serviço possibilita que pessoas tenham acesso a documentos através da Internet e/ou de uma Intranet,‭ ‬em qualquer horário‭ (‬no caso de acesso via Internet,‬também de qualquer lugar‭)‬.‭ ‬É o meio mais recomendado e mais rápido para trocas de arquivos via rede,‭ ‬sendo muito mais ágil que o envio por e-mail.‭

Pode referir-se tanto ao protocolo quanto ao programa que implementa este protocolo (Servidor FTP, neste caso, tradicionalmente aparece em letras minúsculas, por influência do programa de transferência de arquivos do Unix).

A transferência de dados em redes de computadores envolve normalmente transferência de arquivos e acesso a sistemas de arquivos remotos (com a mesma interface usada nos arquivos locais). O FTP (RFC 959) é baseado no TCP, mas é anterior à pilha de protocolos TCP/IP, sendo posteriormente adaptado para o TCP/IP. É o padrão da pilha TCP/IP para transferir arquivos, é um protocolo genérico independente de hardware e do sistema operacional e transfere arquivos por livre arbítrio, tendo em conta restrições de acesso e propriedades dos mesmos.

Implementação:
Veremos agora como instalar e configurar um servidor de ftp básico utilizando-se para isso o vsftpd.

Pré-requisitos:
* Um servidor GNU/Linux Debian, FreeBSD ou outra distro previamente configurado.
* Um repositório ou ports atualizado.

Instalação:
Atualizando o repositório do Debian
debian:/# apt-get update

Instalando o pacote vsftpd
debian:/# apt-get install vsftpd
Lendo lista de pacotes…

Fazendo uma cópia do conf original
debian:/# cp /etc/vsftpd.conf /etc/vsftpd.conf.default

É possível ver os docs e exmplos do vsftpd em
debian:/# ls -l /usr/share/doc/vsftpd/

Assumindo-se que a instalação foi concluída com sucesso vamos agora para a configuração, o arquivo de configuração fica em /etc/vsftpd.conf ou /usr/local/etc/vsftpd.conf caso seja um FreeBSD utilize o seu editor de texto preferido como o ee, vi, nano, pico, etc.

==== Configuração básica VsFTPD ====

#standalone mode – habilita o vsftpd para rodar sem depender do inetd
listen=YES

#Essa opção define o máximo de pessoas conectadas ao mesmo tempo no servidor ftp
max_clients=6
max_per_ip=4

# Essa opção desabilita a utilização do usuário anonymous
anonymous_enable=NO

# Essa opção habilita os usuários que possuem conta no servidor
local_enable=YES

# Opção da permissão de escrita aos usuários conectados no servidor ftp
write_enable=YES

# Security
pasv_enable=YES
hide_ids=YES
pasv_promiscuous=YES

# Essas duas opções definem a porta min e max para usuários que irão conectar através da LAN ou NAT
pasv_min_port=40000
pasv_max_port=65535

# Essa opção é útil no caso de ‘prender’ o usuário no seu home, não permitindo que ele passeie pelos outros diretórios
chroot_local_user=YES

# Essa opção especifica a permissão padrão de quando é enviado um arquivo
local_umask=007

# Dir Security
secure_chroot_dir=/usr/local/share/vsftpd/empty

# Habilita os logs de conexão/uploads/downloads no /var/log/vsftpd.log
xferlog_enable=YES

# Features
ls_recurse_enable=NO
ascii_download_enable=YES

# Essa opção mostra uma mensagem inicial quando o usuário conecta ao servidor ftp
ftpd_banner= Bem vindo ao Servidor FTP

# Essa opção especifica após quanto tempo de inatividade o servidor irá desconectar o usuário
idle_session_timeout=120
accept_timeout=60
connect_timeout=60

# Performance
pam_service_name=vsftpd
userlist_enable=NO
tcp_wrappers=YES

==== Fim da Configuração básica VsFTPD ====

Para iniciar o vsftpd execute
debian:/# /etc/init.d/vsftpd start
Starting FTP server: vsftpd.

Acompanhe as conexões pelo log do vsftpd, para diagnosticar caso algum usuário informe que não está conseguindo acessar/autenticar:
# tail -f /var/log/vsftpd.log

Dicas:
Crie um arquivo de log para o vsftpd
debian:/# touch /var/log/vsftpd.log

Crie também um diretório para não dar erro quando o cliente conectar no servidor ftp
debian:/# mkdir /usr/share/empty

Caso o cliente tenha dificulades em usar o ftp em modo console/prompt recomende a extensão do Iceweasel/Firefox o FireFTP.
– No menu ferramentas acesse “complementos” acesse o link “Mais extensões” procure pelo complemento “FireFTP” clique em
baixar agora… em segundos o FireFTP estará instalado.
– Acesse em Ferramentas “FireFTP” va em “Manage Accounts” coloque em “New Account” coloque o IP do Servidor VsFTPD caso tenha um
DNS instalado coloque o Nome do Host, em seguida coloque o “Usuário/Senha” criados no Servidor VsFTPD.
– A coluna esquerda indica host local, à direita o Servidor FTP, agora já é possível criar diretórios, fazer downloads e uploads dos
arquivos e documentos.

Abaixo os Screenshots da configuração do cliente no Iceweasel/Firefox:

Referências:
man vsftpd
man useradd/adduser
http://pt.wikipedia.org/wiki/Ftp
http://vsftpd.beasts.org/vsftpd_conf.html

Rsync

Publicado: abril 23, 2008 em Tutoriais

Tutorial: Rsync
Autor: Fábio Rafael (moiza)
Email: fabio.ctba@gmail.com

Necessidade:
Nossa necessidade era basicamente um “backup”. Refere-se à cópia de dados de um dispositivo para o outro com o objetivo de posteriormente recuperá-los, caso haja necessidade ou algum problema com os dados originais. Entre os Servidores FreeBSD e Gnu/Linux com várias aplicações rodando, a idéia era conseguir fazer cópias das principais configurações e diretórios importantes. E caso houvesse a necessidade, levantar um novo servidor o mais rápido possível sem afetar os dados.

Fazer backup e ter certeza de que ele funciona é uma das coisas mais importantes que podem ser feitas para proteger os dados armazenados em um servidor. Geralmente não se pode prever acidentes, ataques, desastres e outros tipos de eventos que irão prejudicar os dados ou o próprio hardware. Quanto ao hardware, podemos consertar, utilizar outra máquina ou mesmo receber outra do seguro, ou seja, é algo que tem preço, pode ser comprado. Já os dados e arquivos dos usuários na maioria das vezes são insubstituíveis, podendo representar anos de trabalho, e a sua perda é algo que pode parar uma empresa ou ao menos afetar muito o andamento dos processos. Aí está a importância de existir um backup recente que possa ser restaurado no caso de qualquer incidente.

Síntese:
Definir política e metodologia para cópias de segurança em um determinado servidor.

Descrição:
Garantir que não haverá, por qualquer motivo, perda de informações. Organizar o método e os dados a serem armazenados no servidor para garantir a segurança e integridade da informação essa é a função de uma política de backup. Os dados armazenados na mídia de backup (Fita DAT, gravador de CD/DVD, HD, etc) podem ser restaurados em caso de falhas ou panes dos servidores, evitando desta forma o risco de informações perdidas. Essas gravações, de acordo com o caso, podem ser feitas automaticamente através de agendamentos definidos no servidor.

Implementação:
A estratégia de backup adotada é simples e barata. Temos uma segunda máquina, que é o servidor de backup equipada com um HD SATA 160GB, conectada via rede ao servidor do qual será feito o backup, que será denominado cliente de backup. O backup será feito nesse disco rígido do servidor de backup. O programa utilizado será o rsync, cuja finalidade é prover um sistema de transferência de arquivos rápido e incremental. No primeiro backup o rsync irá copiar todos os arquivos e diretórios especificados dentro de um script para a máquina destino. Após isso, em cada backup ele irá apenas atualizar os arquivos que estão no backup, sincronizando-os com os originais. Desta forma são transferidos pela rede apenas as diferenças entre os arquivos original e backup, tornando o processo mais rápido.

Pré-requisitos:
* A rede deve estar corretamente instalada e configurada;
* Um Servidor GNU/Linux ou FreeBSD ou outra distro da sua preferência;
* Pacote rsyncd instado;
Obs: Ajuste os diretórios de acordo com o seu sistema, os exemplos aqui seguem um modelo instalado em um FreeBSD-6.2;

Instalação:
Configuração no servidor de backup:

No servidor de backup, foi criado o arquivo /usr/local/etc/rsyncd.conf

==========Arquivo rsyncd.conf==========

# rsyncd.conf

# Usuario sob o qual o rsync ira rodar.
uid=root

# Grupo sob o qual o rsync ira rodar.
gid=wheel

# Arquivo de log.
log file = /var/log/rsyncd.log

# Modulo para o servidor megatron
[megatron]

# Caminho onde fica o espaco para este modulo.
path = /backup/megatron

# Usuario(s) autorizado(s).
auth users = backup

# Arquivo de senhas.
secrets file = /usr/local/etc/rsyncd.secrets

# Permitir gravacao.
read only = false

# Nao incluir este modulo quando solicitada a listagem.
list = false

# Hosts permitidos a conectar. Especificar o IP do cliente de backup.
hosts allow = 192.168.1.200

# Modulo para o servidor optimus
[optimus]
path = /backup/optimus
auth users = backup
secrets file = /usr/local/etc/rsyncd.secrets
read only = false
list = false
hosts allow = 192.168.1.201

=======Fim do arquivo rsyncd.conf=======

Para cada “path” especificado foi criado o diretório correspondente. Neste exemplo, criamos manualmente os diretórios /backup, /backup/megatron e /backup/optimus, e atribuido a permissão 700 a todos. O dono destes diretórios é o root.

Também foi criado o arquivo /usr/local/etc/rsyncd.secrets, que contém as senhas dos usuários de cada módulo. Estes usuários não precisam existir no sistema, como pode-se observar usamos o mesmo usuário para os dois módulos

==========Arquivo rsyncd.secrets==========

# rsyncd.secrets

# Formato:

# usuario:senha

backup:senhaX

==========Fim do arquivo rsyncd.secrets==========

Os arquivos rsyncd.conf e rsyncd.secrets com permissão 600.

Crie um script de inicialização para o rsync, com os seguintes comandos para inicialização e shutdown, respectivamente:

/usr/local/bin/rsync –daemon –config=/usr/local/etc/rsyncd.conf

killall rsync

Configuração no cliente de backup:

No servidor ou máquina da qual se desejava fazer backup (cliente de backup), criamos um script como o exemplo abaixo, com a permissão 700. Adaptado para cada cliente de backup e também para incluir todos os locais desejamos fazer backup:

==========Arquivo backup.sh==========

#!/bin/sh
# Comando rsync.
RSYNC=’/usr/local/bin/rsync -avR –delete –numeric-ids –password-file=/usr/local/etc/rsync.password’

# Destino do backup: IP do servidor de backup e formato de acesso: login_do_modulo@ip_do_servidor_backup::modulo/
DEST=’backup@192.168.1.7:megatron/’

# Arquivo de log.
LOG=’/var/log/backup.log’

# Grava a data/hora de inicio do backup.
echo -e “\nInicio do backup – `date`\n” » $LOG

# Para fazer backups dos seguintes diretorios.
$RSYNC /etc $DEST
$RSYNC /usr/local/etc $DEST
$RSYNC /home $DEST
$RSYNC /dados $DEST

# Grava a data/hora de fim do backup.
echo -e “\nFim do backup – `date`\n” » $LOG

==========Fim do arquivo backup.sh==========

Criado também o arquivo /usr/local/etc/rsync.password. O conteúdo deste arquivo ficou apenas uma linha com a senha que foi configurada no servidor de backup para este módulo. A permissão deste arquivo, é 600.

Por fim, agendado a execução do backup no Cron. Editado o arquivo /etc/crontab e adicionado uma linha para executar o script na freqüência desejada. O exemplo abaixo irá executar nas segundas, quartas e sextas-feiras às 2 horas:

debian:/# crontab -e
0 2 * * 1,3,5 root /usr/backup.sh

Para executar o backup todo dia, às 02 horas da manhã:
0 2 * * * root /usr/backup.sh

Dicas:
As informacões dos backups podem ser vistas pelo “log” relatório do backup, como por exemplo início duração e fim.

Referências:
http://rsync.samba.org

OpenVPN

Publicado: abril 22, 2008 em Tutoriais

Tutorial: OpenVPN
Autor: Fábio Rafael (moiza)
Email: fabio.ctba@gmail.com

Necessidade:
A empresa se comunicar com suas filiais e distribuidoras, e até mesmo para o acesso remoto por parte dos membros da empresa (diretoria, vendas, etc).
Umas das grandes vantagens que a VPN nos traz é a redução dos custos, pois utiliza a rede pública (Internet) para tráfego de dados. Devido à existência desta necessidade procuramos implantar um sistema baseado na tecnologia Open Source. O OpenVpn que oferece uma verdadeira segurança para comunicação de dados corporativos. Através deste sistema, todas as conexões são criptografadas e autenticadas, inviabilizando qualquer tentativa de captura dos dados trafegados na rede.
Com este processo implantado, caso algum indivíduo consiga capturar os dados trafegados nesta VPN, este não conseguirá ter acesso ao seu conteúdo, pois os mesmo são criptografados com uma chave forte em bits.

Síntese:‭
Utilização de redes de comunicação não confiáveis para trafegar informações de forma segura. ‭VPN é a abreviatura de Virtual Private Network ou Rede Privada Virtual, é assim chamada por utilizar uma rede pública para trafegar dados privados.

Descrição:
‬As redes públicas são consideradas não confiáveis,‭ ‬tendo em vista que os dados que nelas trafegam estão sujeitos a interceptação e captura.‭ ‬Em contrapartida,‭ ‬estas tendem a ter um custo de utilização inferior aos necessários para o estabelecimento de redes proprietárias,‭ ‬envolvendo a contratação de circuitos exclusivos e independentes. Este é um fator que levou-nos a esse projeto, migrando as unidades interligadas através de MPLS para uma solução mais econômica, não perdendo em performance e segurança. Este projeto teve grande ligação com outro em paralelo o “controle de trafego” que poderá ser consultado aqui mesmo na categoria howto/tutoriais.

Implementação:
A implementação desse serviço envolve a configuração do servidor, a definição dos recursos a serem utilizados e a configuração dos “clientes”.

Pré-requisitos:
* Servidor GNU/Linux Debian instalado, ou outra distro de preferência.
* Pacote OpenVpn
* Iptables

Obs: É aconselhável verificar a versão do Kernel do seu sistema, versões mais novas dos pacotes a serem utilizadas e atualizar seu repositório e depois fazer um bom uso do apt-get.

Instalação:
Para instalar o OpenVPN no Debian Etch, execute o comando debian:
# apt-get install openvpn

Criação dos certificados e das chaves
debian:/# cd /usr/share/doc/openvpn/examples/easy-rsa/

É recomendavel criar um backup do diretório onde vamos criar as chaves
debian:/usr/share/doc/openvpn/examples/easy-rsa# cp -r 2.0/ 2.0-default

Edite o arquivo vars e altere os dados necessários. Abaixo um exemplo
debian:/usr/share/doc/openvpn/examples/easy-rsa/2.0# vi vars

===========================================
# generation process
export KEY_SIZE=1024

# In how many days should the root CA key expire?
export CA_EXPIRE=3650

# These are the default values for fields
# which will be placed in the certificate.
# Don’t leave any of these fields blank.
export KEY_COUNTRY=”BR”
export KEY_PROVINCE=”PR”
export KEY_CITY=”Umuarama”
export KEY_ORG=”Home Moiza”
export KEY_EMAIL=”fabio.ctba@gmail.com”
===========================================

#####################
Gerando as chaves para o servidor:
#####################

###Primeiro Passo###

debian:/usr/share/doc/openvpn/examples/easy-rsa/2.0# . ./vars

debian:/usr/share/doc/openvpn/examples/easy-rsa/2.0# ./clean-all

debian:/usr/share/doc/openvpn/examples/easy-rsa/2.0# ./build-ca
Generating a 1024 bit RSA private key
……………….++++++
…………………..++++++
writing new private key to ‘ca.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [BR]:
State or Province Name (full name) [PR]:
Locality Name (eg, city) [Umuarama]:
Organization Name (eg, company) [Home Moiza]:
Organizational Unit Name (eg, section) []:Depto Informatica
Common Name (eg, your name or your server’s hostname) [Home Moiza CA]:
Email Address [fabio.ctba@gmail.com]:
debian:/usr/share/doc/openvpn/examples/easy-rsa/2.0#

###Segundo Passo###

debian:/usr/share/doc/openvpn/examples/easy-rsa/2.0# ./build-key-server server
Generating a 1024 bit RSA private key
……………++++++
…++++++
writing new private key to ‘server.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [BR]:
State or Province Name (full name) [PR]:
Locality Name (eg, city) [Umuarama]:
Organization Name (eg, company) [Home Moiza]:
Organizational Unit Name (eg, section) []:Depto Informatica
Common Name (eg, your name or your server’s hostname) [server]:
Email Address [fabio.ctba@gmail.com]:

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []: ——— Não entre com nenhuma senha
An optional company name []: —— Não entre com nenhuma senha

Using configuration from /usr/share/doc/openvpn/examples/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
countryName :PRINTABLE:’BR’
stateOrProvinceName :PRINTABLE:’PR’
localityName :PRINTABLE:’Umuarama’
organizationName :PRINTABLE:’Home Moiza’
organizationalUnitName:PRINTABLE:’Depto Informatica’
commonName :PRINTABLE:’server’
emailAddress :IA5STRING:’fabio.ctba@gmail.com’
Certificate is to be certified until Apr 20 12:41:25 2018 GMT (3650 days)
Sign the certificate? [y/n]:y ——– Coloque y (yes)

1 out of 1 certificate requests certified, commit? [y/n]y ——- Coloque y (yes)
Write out database with 1 new entries
Data Base Updated
debian:/usr/share/doc/openvpn/examples/easy-rsa/2.0#

####################
Gerando as chaves para o Cliente:
####################

Obs: Usa-seo mesmo procedimento para criar para outros clientes, neste ex. estamos criando para o “cliente1”.

debian:/usr/share/doc/openvpn/examples/easy-rsa/2.0# ./build-key cliente1
Generating a 1024 bit RSA private key
….++++++
………….++++++
writing new private key to ‘cliente1.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [BR]:
State or Province Name (full name) [PR]:
Locality Name (eg, city) [Umuarama]:
Organization Name (eg, company) [Home Moiza]:
Organizational Unit Name (eg, section) []:Depto Informatica
Common Name (eg, your name or your server’s hostname) [cliente1]:
Email Address [fabio.ctba@gmail.com]:

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []: ——- Não entre com nenhuma senha, apenas
An optional company name []: —— Não entre com nenhuma senha, apenas
Using configuration from /usr/share/doc/openvpn/examples/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
countryName :PRINTABLE:’BR’
stateOrProvinceName :PRINTABLE:’PR’
localityName :PRINTABLE:’Umuarama’
organizationName :PRINTABLE:’Home Moiza’
organizationalUnitName:PRINTABLE:’Depto Informatica’
commonName :PRINTABLE:’cliente1′
emailAddress :IA5STRING:’fabio.ctba@gmail.com’
Certificate is to be certified until Apr 20 12:49:36 2018 GMT (3650 days)
Sign the certificate? [y/n]:y ——- Coloque y (yes)

1 out of 1 certificate requests certified, commit? [y/n]y ——- Coloque y (yes)
Write out database with 1 new entries
Data Base Updated
debian:/usr/share/doc/openvpn/examples/easy-rsa/2.0#

Verificando a criação das Chaves elas ficam criadas em:
debian:/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys# —— Caminho

debian:/usr/share/doc/openvpn/examples/easy-rsa/2.0# ./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
……………………………………………………….
……………………………………………………….
………………..+…………+……………….+……….

##########################
Arquivo de configuração do Server/Gateway
##########################

Obs: O arquivo de configuração do gateway, a ser criado em /etc/openvpn/, poderá ter qualquer nome, desde que a extensão de tal arquivo seja .conf (aqui vamos usar server.conf)

No Debian, após instalar o pacote OpenVPN, é criado o diretório /usr/share/doc/openvpn/, que conterá diversas informações é um guia de exemplo, comentado, do arquivo de configuração do OpenVPN.

debian:/# vi /etc/openvpn/server.conf
================INICIO================
port 1194
proto udp
dev tun

ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh1024.pem

client-config-dir ccd

server 10.8.0.0 255.255.255.0
push “route 192.168.1.0 255.255.255.0”
up ./server.up

ifconfig-pool-persist ipp.txt
client-to-client

keepalive 10 120

cipher AES-128-CBC

comp-lzo
max-clients 15
user nobody
group nobody

persist-key
persist-tun
verb 3
status /var/log/openvpn-status.log ——- verifique a criação desse arquivo.
log /var/log/openvpn.log ——- verifique a criação desse arquivo.
log-append /var/log/openvpn.log ——- verifique a criação desse arquivo.

================FIM===============

O arquivo /etc/openvpn/ipp.txt é o arquivo responsável por setar qual será o ip do cliente na rede Vpn.

debian:/etc/openvpn# cat ipp.txt
cliente1,10.8.0.10

O arquivo /etc/openvpn/server.up é o arquivo responsável para setar a rota server para o client, deixe-o com permissão de execução (#chmod 777 /etc/openvpn/server.up)

debian:/etc/openvpn# cat server.up
route add -net 192.168.2.0 netmask 255.255.255.0 dev tun0

Dentro da pasta /etc/openvpn deve conter um diretório com o nome ccd e dentro desse um subdiretório contendo um arquivo para cada cliente especificando a rota para o cliente server.

debian:/etc/openvpn/ccd# cat cliente1
ifconfig-push 10.8.0.10 10.8.0.1
iroute 192.168.2.0 255.255.255.0

Agora precisamos mover as chaves do server para o diretório /etc/openvpn/keys
OBS: As chaves se encontram em /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys

debian:/etc/openvpn# mv /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/ .

Inicialização do serviço:

Para inicializar o serviço, utilize o comando a seguir:
Obs: Antes de inicializar verifique o se possui o group nobody em seu /etc/group ;-)

debian:/# /etc/init.d/openvpn start
Starting virtual private network daemon: server(OK).

Caso o OpenVPN não tenha inicializado corretamente, verifique o motivo no log (/var/log/openvpn.log)
Verifique se o OpenVPN no gateway inicializou corretamente. Utilize o comando:

debian:/# ps ax |grep openvpn
4076 ? Ss 0:00 /usr/sbin/openvpn –writepid /var/run/openvpn.server.pid –daemon ovpn-server –cd /etc/openvpn –config /etc/openvpn/server.conf

Agora basta mascarar a Lan, veja o exemplo abaixo com o Iptables:
Crie um script em /etc/init.d/firewall.sh com o seguinte conteúdo abaixo, de permissão de execução, e coloque no boot do sistima para iniciar automaticamente.

===============INICIO================
#!/bin/bash
stop ()
{
echo “0” > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -X
iptables -F -t nat
}

start ()
{

echo 1 > /proc/sys/net/ipv4/ip_forward

# Regras para OpenVpn
iptables -A INPUT -i eth0 -p tcp –dport 1194 -j ACCEPT
iptables -A INPUT -i eth0 -p udp –dport 1194 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 1194 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp –sport 1194 -j ACCEPT

iptables -A INPUT -i tun+ -j ACCEPT
iptables -A OUTPUT -o tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -o tun+ -j ACCEPT

# Habilitando Masquerade
iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE

}

if [ $# -lt 1 ]; then
echo “$1 { start | stop | restart }”;
exit 1;
fi

if [ $1 == “start” ]; then
echo “Iniciando o servidor firewall … “;
start;
fi

if [ $1 == “stop” ]; then
echo “Parando o servidor firewall … “;
stop;
fi

if [ $1 == “restart” ]; then
echo “Parando o servidor firewall … “;
stop;
echo “Iniciando o servidor firewall … “;
start;
fi

===============FIM================

##############################
Configuração dos Clientes OpenVPN em GNU/Linux
##############################

Obs: Cada máquina cliente terá que ser configurada, individualmente:
Lembre-se que já havíamos criado a chave e certificados para o cliente1:

Assim como no Server/Gateway a estrutura dos diretórios podem seguir o mesmo esquema.
Então copie as chaves criadas para /etc/openvpn/keys

cliente1.crt ——- Certificado do cliente
cliente1.key —— Chave privada do cliente
ca.crt —— Certificado raiz da CA

Altere as permissões dos arquivos gerados para ter mais segurança:

# chmod 644 /etc/openvpn/keys/cliente1.crt
# chmod 400 /etc/openvpn/keys/cliente1.key
# chmod 644 /etc/openvpn/keys/ca.crt

Instalação do OpenVPN:

Da mesma forma que foi feito no servidor, instale o OpenVPN com o comando a seguir:

debian:/# apt-get install openvpn

Arquivo de configuração do cliente:

debian:/# vi /etc/openvpn/client.conf

===============INICIO================
client
dev tun
proto udp

remote 200.XX.XX.XX 1194
resolv-retry infinite
nobind
ping 15

persist-key
persist-tun

ca keys/ca.crt
cert keys/parati.crt
key keys/parati.key

cipher AES-128-CBC

ns-cert-type server
comp-lzo
verb 3

status /var/log/openvpn-status.log ——- verifique a criação desse arquivo.
log /var/log/openvpn.log ——- verifique a criação desse arquivo.
log-append /var/log/openvpn.log ——– verifique a criação desse arquivo.

===============FIM================

Inicialização do cliente OpenVPN em GNU/Linux:

Para inicializar o serviço, utilize o comando a seguir:
Obs: Antes de inicializar verifique o se possui o group nobody em seu /etc/group ;-)

debian:/# /etc/init.d/openvpn start
Starting virtual private network daemon: server(OK).

Verifique se o OpenVPN no cliente inicializou corretamente. Utilize o comando:
debian:/# ps ax |grep openvpn

Caso o OpenVPN não tenha inicializado corretamente, verifique o motivo no log /var/log/openvpn.log.

Teste da conexão:
Para testar a conexão, “pingue” um endereço IP que pertença à rede a ser acessada.

Pode-se montar a mesma configuração do server para mascaramento.

#################################
Configuração dos clientes OpenVPN em MS Windows XP
#################################

Obs: Cada máquina cliente terá que ser configurada, individualmente:
Lembre-se Já havíamos criado a chave e certificados para o cliente1: (vamos usar o mesmo para exemplo).

Baixe e instale o pacote OpenVPN GUI para MS Windows versão estável, aconselhável fazer a instalação padrão, que deverá ocorrer em C:\Arquivos de Programas\OpenVPN

A instalação dos certificados e das chaves no cliente deverão ficar no diretório C:\Arquivos de Programas\OpenVPN\config:

cliente1.crt —— Certificado do cliente
cliente1.key —— Chave privada do cliente
ca.crt —— Certificado raiz da CA

Um exemplo do arquivo de configuração do cliente:

O arquivo C:\Arquivos de Programas\OpenVPN\sample-config\client.ovpn é um exemplo, comentado, de arquivo de configuração do OpenVPN. É com base nele que deverá ser gerado o arquivo de configuração da vpn no cliente. O arquivo final também ficará em C:\Arquivos de Programas\OpenVPN\config\ e a sua extensão tem que ser .ovpn.

Abaixo, um exemplo do arquivo de configuração do cliente:

===============INICIO================
client
dev tun
proto udp

remote 200.XX.XX.XX 1194
resolv-retry infinite
nobind
ping 15

persist-key
persist-tun

ca keys/ca.crt
cert keys/parati.crt
key keys/parati.key

cipher AES-128-CBC

ns-cert-type server
comp-lzo
verb 3

status openvpn-status.log # comente esta linha se for utilizar o OpenVPN GUI
log openvpn.log # comente esta linha se for utilizar o OpenVPN GUI
log-append openvpn.log # comente esta linha se for utilizar o OpenVPN GUI

===============FIM================

Inicialização do cliente Windows XP:

Para inicializar o cliente pelo OpenVPN GUI (método aconselhado), clique com o botão direito do mouse sobre o ícone do mesmo, existente no SysTray, conforme e escolha a opção Connect

Caso o OpenVPN não tenha inicializado corretamente, verifique o motivo no log openvpn.log em C:\Arquivos de Programas\OpenVPN\config

Teste da conexão
Para testar a conexão, “pingue” um endereço IP que pertença à rede ou tente acessar um site da mesma.

========
Referências:
http://openvpn.net/howto.html
http://eriberto.pro.br/wiki/index.php?title=Interliga%C3%A7%C3%A3o_de_redes_com_OpenVPN
http://eriberto.pro.br/wiki/index.php?title=Autoridade_Certificadora_%28CA%29_com_o_OpenSSL
http://www.gta.ufrj.br/grad/01_2/mpls/mpls.htm
http://openvpn.se/

Squid Proxy

Publicado: abril 18, 2008 em Tutoriais

Tutorial: Squid Proxy
Autor: Fábio Rafael (moiza)
Email: fabio.ctba@gmail.com

Necessidade:
Ter uma forma de controle dos acessos a internet a nível de usuário, evitando acessos proibidos, outros desnecessários no período de trabalho na empresa, podendo tirar relatórios destes para análise preventiva do uso da internet, poder monitorar de forma online os acessos, bloquear downloads, sites proibidos, e uma forma de criar grupos a nível de acesso, além de garantir garantir um desempenho mais satisfatório na navegação.

Síntese:
‭‬Controla os acessos a servidores WWW e FTP,‭ ‬garantindo uma melhor performance da rede e permitindo que os usuários utilizem o serviço de forma eficiente e segura.

Descrição:
‬O servidor proxy auxilia na distribuição de acessos à Internet‭ (‬páginas WWW e FTP‭)‬.‭ ‬Há uma melhora no acesso às páginas mais vistadas,‭ ‬graças ao armazenamento local de páginas e imagens‭ (‬cache‭)‬.‭
‬Permite o controle de acessos baseados em horários,‭ ‬palavras-chaves,‭ ‬usuários e domínios e ainda gera um histórico‭ (‬log‭) ‬de páginas visitadas.
‬O seu funcionamento se baseia no fato de que os clientes irão realizar as conexões a servidores na Internet através dele e,‭ ‬portanto,‭ ‬todo conteúdo irá passar por ele antes de chegar ao cliente.‭‬Dessa forma,‭ ‬os acessos são registrados em arquivos de log e a sua configuração permite restringir quais conteúdos poderão ser acessados pelos clientes da rede local.

Implementação:
A implementação desse serviço envolve a configuração do servidor, a definição dos recursos a serem
utilizados e a configuração dos clientes.

Pré-requisitos:
* Sua rede deve estar corretamente instalada e configurada;
* Um Servidor GNU/Linux Debian – ou outra distro da sua preferência ou mesmo um FreeBSD ;-)
* Servidor Apache previamente configurado e funcionando.
* Pacote Sarg para geração dos relatórios.

Instalação:
Levando em consideração que já possui o Debian instalado, vamos ao que interessa.

Vamos fazer aqui uma instalação básica do Proxy Squid no Debian, usando o apt-get, claro!
Antes não esqueça de checar seus repositórios em /etc/apt/sources.list

Instalando o Squid:
debian:/# apt-get update
debian:/# apt-get install squid
Quer continuar [S/n]?
responda que sim quer continuar a instalação…

Caso já tenha o Squid instalado e queira verificar suas opções de instalação execute o comando abaixo e vc verá algo assim:

galvatron:/etc/squid# squid -v
Squid Cache: Version 2.6.STABLE18
configure options: ‘–prefix=/usr’ ‘–exec_prefix=/usr’ ‘–bindir=/usr/sbin’ ‘–sbindir=/usr/sbin’ ‘–libexecdir=/usr/lib/squid’ ‘–sysconfdir=/etc/squid’ ‘–localstatedir=/var/spool/squid’ ‘–datadir=/usr/share/squid’ ‘–enable-async-io’ ‘–with-pthreads’ ‘–enable-storeio=ufs,aufs,coss,diskd,null’ ‘–enable-linux-netfilter’ ‘–enable-arp-acl’ ‘–enable-epoll’ ‘–enable-removal-policies=lru,heap’ ‘–enable-snmp’ ‘–enable-delay-pools’ ‘–enable-htcp’ ‘–enable-cache-digests’ ‘–enable-underscores’ ‘–enable-referer-log’ ‘–enable-useragent-log’ ‘–enable-auth=basic,digest,ntlm’ ‘–enable-carp’ ‘–enable-follow-x-forwarded-for’ ‘–with-large-files’ ‘–with-maxfd=65536’ ‘i386-debian-linux’ ‘build_alias=i386-debian-linux’ ‘host_alias=i386-debian-linux’ ‘target_alias=i386-debian-linux’

Instalando o Sarg:
debian:/# apt-get install sarg

Caso não tenha o servidor Apache instalado:
debian:/# apt-get install apache2

Por padrão o Debian coloca as confs do Squid e Sarg em:
debian:/etc/squid#

Pronto agora basta começarmos as configurações:
debian:/# cd /etc/squid/
cp squid.conf squid.conf.default
cp sarg.conf sarg.conf.default

Editando o squid.conf e fazendo o necessário:
debian:/etc/squid# vi squid.conf

Com as configurações abaixo você já poderá ter um Squid Proxy estável e funcional, configure
de acordo com a sua rede e necessidades. As TAGs utilizadas estão comentadas para facilitar o
entendimento do que esta sendo usado, e abaixo da conf esta a esplicação das ACLs utilizadas.

# ———————————————————

# Squid normally listens to port 3128
http_port 192.168.1.1:3128

# TAG: icp_port
# The port number where Squid sends and receives ICP queries to
# and from neighbor caches. Default is 3130. To disable use
# 0″. May be overridden with -u on the command line.
#
#Default:
icp_port 3130

# TAG: htcp_port
# The port number where Squid sends and receives HTCP queries to
# and from neighbor caches. To turn it on you want to set it 4827.
# By default it is set to “0” (disabled).
#
#Default:
htcp_port 0

# TAG: cache
# A list of ACL elements which, if matched, cause the request to
# not be satisfied from the cache and the reply to not be cached.
# In other words, use this to force certain objects to never be cached.
#
# You must use the word ‘DENY’ to indicate the ACL names which should
# NOT be cached.
#
# Default is to allow all to be cached
#We recommend you to use the following two lines.
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY

# TAG: broken_vary_encoding
# Many servers have broken support for on-the-fly Content-Encoding,
# returning the same ETag on both plain and gzip:ed variants.
# Vary replies matching this access list will have the cache split
# on the Accept-Encoding header of the request and not trusting the
# ETag to be unique.
#
# Apache mod_gzip and mod_deflate known to be broken so don’t trust
# Apache to signal ETag correctly on such responses
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache

#Default:
cache_mem 128 MB

#Default:
ipcache_size 2048

# TAG: fqdncache_size (number of entries)
# Maximum number of FQDN cache entries.
#
#Default:
fqdncache_size 2048

# LOGFILE PATHNAMES AND CACHE DIRECTORIES
#Default:
cache_dir ufs /var/spool/squid 2000 32 512

#Default:
# none

# TAG: auth_param
# This is used to define parameters for the various authentication
# schemes supported by Squid.

auth_param basic program /usr/lib/squid/ncsa_auth /usr/contas

#Recommended minimum configuration per scheme:
auth_param basic children 5
auth_param basic realm REDE1
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

#Suggested default:
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320

# ACCESS CONTROLS
acl senha proxy_auth REQUIRED

# Recommended minimum configuration:
acl rede1 src 192.168.1.0/24
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT

### Inicio do Perfil das ACLS ###
##
acl bloq_iprede src “/etc/squid/acls/bloq_iprede”
http_access deny bloq_iprede
##
acl user_ouro proxy_auth “/etc/squid/acls/user_ouro”
http_access allow user_ouro
##
acl lib_dominio url_regex -i “/etc/squid/acls/lib_dominio”
http_access allow lib_dominio
##
acl bloq_dominio url_regex -i “/etc/squid/acls/bloq_dominio”
http_access deny bloq_dominio
##
acl bloq_palavra url_regex -i “/etc/squid/acls/bloq_palavra”
http_access deny bloq_palavra
##
acl bloq_ip url_regex -i “/etc/squid/acls/bloq_ip”
http_access deny bloq_ip
##
acl bloq_download urlpath_regex -i “/etc/squid/acls/bloq_download”
http_access deny bloq_download
##
acl bloq_diretorio urlpath_regex -i “/etc/squid/acls/bloq_diretorio”
http_access deny bloq_diretorio
##
acl bloq_diversao url_regex -i “/etc/squid/acls/bloq_diversao”
http_access deny bloq_diversao
##
acl bloq_multimidia url_regex -i “/etc/squid/acls/bloq_multimidia”
http_access deny bloq_multimidia
##
acl lib_atuvirus dstdomain “/etc/squid/acls/lib_atuvirus”
http_access deny !lib_atuvirus !senha
##
acl user_prata proxy_auth “/etc/squid/acls/user_prata”
http_access allow user_prata
##
acl user_bronze proxy_auth “/etc/squid/acls/user_bronze”
acl lib_bronze url_regex -i “/etc/squid/acls/lib_bronze”
http_access deny user_bronze !lib_bronze

### Fim do Perfil de ACLS ###
#
# TAG: follow_x_forwarded_for
# Note: This option is only available if Squid is rebuilt with the
# -DFOLLOW_X_FORWARDED_FOR option

# Default:
follow_x_forwarded_for deny rede1

# Recommended minimum configuration:
http_access allow senha
http_access deny rede1
htcp_access deny rede1
htcp_clr_access deny rede1
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager
# Only allow purge requests from localhost
http_access allow purge localhost
http_access deny purge
# Deny requests to unknown ports
http_access deny !Safe_ports
# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

# Example rule allowing access from your local networks. Adapt
# to list your (internal) IP networks from where browsing should
# be allowed
http_access allow rede1
http_access allow localhost

# TAG: http_reply_access
# Allow replies to client requests. This is complementary to http_access.
#
# http_reply_access allow|deny [!] aclname …
#
# NOTE: if there are no access lines present, the default is to allow
# all replies
#
# If none of the access lines cause a match the opposite of the
# last line will apply. Thus it is good practice to end the rules
# with an “allow all” or “deny all” entry.
#
#Default:
# http_reply_access allow all
#
#Recommended minimum configuration:
#
# Insert your own rules here.
#
#
# and finally allow by default
http_reply_access allow rede1

# TAG: icp_access
# Allowing or Denying access to the ICP port based on defined
# access lists
#
# icp_access allow|deny [!]aclname …
#
# See http_access for details
#
#Default:
# icp_access deny all

# TAG: htcp_clr_access
# Allowing or Denying access to purge content using HTCP based
# on defined access lists
#
# htcp_clr_access allow|deny [!]aclname …
#
# See http_access for details
#
##Allow HTCP CLR requests from trusted peers
#acl htcp_clr_peer src all
#htcp_clr_access allow htcp_clr_peer
#
#Default:
htcp_clr_access deny rede1

# TAG: ident_lookup_access
# A list of ACL elements which, if matched, cause an ident
# (RFC931) lookup to be performed for this request. For
# example, you might choose to always perform ident lookups
# for your main multi-user Unix boxes, but not for your Macs
# and PCs. By default, ident lookups are not performed for
# any requests.
#
# To enable ident lookups for specific client addresses, you
# can follow this example:
#
# acl ident_aware_hosts src 198.168.1.0/255.255.255.0
# ident_lookup_access allow ident_aware_hosts
# ident_lookup_access deny all
#
# Only src type ACL checks are fully supported. A src_domain
# ACL might work at times, but it will not always provide
# the correct result.
#
#Default:
ident_lookup_access deny rede1

# TAG: reply_body_max_size bytes allow|deny acl acl…
# This option specifies the maximum size of a reply body in bytes.
# It can be used to prevent users from downloading very large files,
# such as MP3’s and movies. When the reply headers are received,
# the reply_body_max_size lines are processed, and the first line with
# a result of “allow” is used as the maximum body size for this reply.
# This size is checked twice. First when we get the reply headers,
# we check the content-length value. If the content length value exists
# and is larger than the allowed size, the request is denied and the
# user receives an error message that says “the request or reply
# is too large.” If there is no content-length, and the reply
# size exceeds this limit, the client’s connection is just closed
# and they will receive a partial reply.
#
# WARNING: downstream caches probably can not detect a partial reply
# if there is no content-length header, so they will cache
# partial responses and give them out as hits. You should NOT
# use this option if you have downstream caches.
#
# If you set this parameter to zero (the default), there will be
# no limit imposed.
#
#Default:
reply_body_max_size 0 allow rede1

# TAG: cache_effective_group
# If you want Squid to run with a specific GID regardless of
# the group memberships of the effective user then set this
# to the group (or GID) you want Squid to run as. When set
# all other group privileges of the effective user is ignored
# and only this GID is effective. If Squid is not started as
# root the user starting Squid must be member of the specified
# group.
cache_effective_group proxy

# TAG: error_directory
# If you wish to create your own versions of the default
# (English) error files, either to customize them to suit your
# language or company copy the template English files to another
# directory and point this tag at them.
#
#Default:
error_directory /usr/share/squid/errors/Portuguese

# TAG: snmp_access
# Allowing or denying access to the SNMP port.
#
# All access to the agent is denied by default.
# usage:
#
# snmp_access allow|deny [!]aclname …
#
#Example:
# snmp_access allow snmppublic localhost
snmp_access allow rede1

# ———————————————————

#### Descritivo do funcionamento dos Perfis do Squid ###

OURO:
Perfil liberado para usuarios com a necessidade de autenticacao e acesso sem restricoes.
Os usuarios liberados para esse acesso estao listados no arquivo user_ouro

PRATA:
Perfil liberado para usuarios com a necessidade de autenticacao e acesso com restricoes.
Os usuarios liberados para esse acesso estao listados no arquivo user_prata
Este perfil possui as seguintes restricoes:

1-Diretorios listados no arquivo bloq_diretorio
2-Sites de jogos, blogs, etc, listados no arquivo bloq_diversao
3-Dominios listados no arquivo bloq_dominio
4-Download de arquivos com extensoes listadas no arquivo bloq_download
5-Palavras listadas no arquivo bloq_palavra
6-Conteudos de dominios listados no arquivo bloq_contdominio
7-Sites listados no arquivo bloq_site
8-Conteudos de multimidia listados no arquivo bloq_multimidia
9-Estacoes de trabalho bloqueados por ip listados no arquivo bloq_ip

BRONZE:
Perfil liberado para usuarios com a necessidade de autenticacao, acesso com restricoes e limitacoes.
Os usuarios liberados para esse acesso estao listados no arquivo user_bronze
Este perfil possui as seguintes restricoes:

1-Diretorios listados no arquivo bloq_diretorio
2-Sites de jogos, blogs, etc, listados no arquivo bloq_diversao
3-Dominios listados no arquivo bloq_dominio
4-Download de arquivos com extensoes listadas no arquivo bloq_download
5-Palavras listadas no arquivo bloq_palavra
6-Conteudos de dominios listados no arquivo bloq_contdominio
7-Sites listados no arquivo bloq_site
8-Conteudos de multimidia listados no arquivo bloq_multimidia
9-Estacoes de trabalho bloqueados por ip listados no arquivo bloq_ip
*-As limitacoes, ou seja, os locais disponiveis estao listados no arquivo lib_bronze

OBSERVAÇÃO:
O caminho usado para as acls estao em /etc/squid/acls
Estacoes que sao bloqueadas por mac address sao configuradas somente na acls
Usuarios de teste – teste1=ouro teste2=prata teste3=bronze
Script para relatorio diario em /etc/squid/diario
Script para monitoramento on line de usuarios em /usr/acessos
Contas dos usuarios do squid cadastradas em /usr/contas
Logs do squid para o sarg em /var/log/squid/access.log
Acesso ao webgui do sarg em http://galvatron.dominio.com.br/squid-reports

Dicas:

Script para relatorio diario do sarg:
galvatron:/etc/squid# cat diario
#!/bin/sh
data=$(date “+%d/%m/%Y”)
/usr/bin/sarg -f /etc/squid/sarg.conf -d $data-$data

Script para monitoramento online do acessos ao proxy squid:
galvatron:/var/log/squid# cat /usr/acessos
#!/bin/sh
tail -f /usr/local/squid/logs/access.log | awk ‘{print$3 “” $8 “” $7}’

Arquivo das contas criadas pelo comando # htpasswd /usr/contas claudio
galvatron:/var/log/squid# cat /usr/contas
bete:HCMCN6udAw1Yo
eduardo:jb7oSn3wquAyI
claudio:sMgbazYT1oHo6

Antes de startar o seu squid proxy, lembre-se de criar o arquivo de swap execute:
galvatron:# squid -z
2008/04/18 16:12:16| Creating Swap Directories
É bem provável que se tiver algum erro no seu squid.conf ele mostrará aqui.

Startando Squid Proxy:
galvatron:/# /etc/init.d/squid start
Starting Squid HTTP proxy: squid.

Checando o Start do Squid Proxy:
galvatron:/# ps ax |grep squid
2514 ? Ss 0:00 /usr/sbin/squid -D -sYC
2517 ? S 0:00 (squid) -D -sYC
2531 pts/0 S+ 0:00 grep squid

Após uma alteração no squid.conf execute simplesmente:
galvatron:/# squid -k reconfigure

Outras Informações:
galvatron:/# squid –help
galvatron:/# man squid

Extras: (fazendo…)
Usuario adminproxy para gerenciamento do sarg em galvatron.dominio.com.br/squid-reports
Faixa de ip da intranet para uso do chpasswd em /usr/ipauth
Troca da senha via browser galvatron.dominio.com.br:8080/cgi-bin/chpasswd.cgi
Pasta do relatorio protegida em /usr/local/www/data/sarg disponivel apenas para o adminproxy

Referências:
http://www.squid-cache.org/
http://www.linuxman.pro.br
http://www.apache.org/

Samba

Publicado: abril 17, 2008 em Tutoriais

Tutorial: Samba
Autor: Fábio Rafael (moiza)
Email: fabio.ctba@gmail.com

Necessidade:
Ter um Servidor de Dados para compartilhar arquivos e que também atuasse como um Servidor Primario
de Dominio (PDC) facilitando assim o suporte a rede tendo mais controle dos usuários e máquinas com esquema de perfil ambulante, onde qualquer estação de trabalho windows que o usuário esteja terá todo seu desktop, documentos, etc. Além de melhorar a segurança em diretórios pessoais,de sistemas e diretório públicos na empresa. Tivemos também de vetar (proibir) gravações de alguns tipos de arquivos neste servidor, e também da criação de uma lixeira para eventual perda de documentos dos usuários, este processo se da apenas em casos emergênciais.

Samba O que é?
O SAMBA é um aplicativo que torna possível o compartilhamento de recursos com máquinas rodando Windows®. O nome SAMBA é derivado do protocolo utilizado pelo Windows® para compartilhar discos e impressoras. O protocolo SMB, Server Message Block; através da utilização do SAMBA é possível criar redes mistas, utilizando servidores Linux e clientes Windows®. O SAMBA também permite que o Linux acesse discos exportados de máquinas Windows®. Além de compartilhar recursos, o SAMBA é capaz de executar várias funções de um servidor Windows®, como por exemplo autenticação de clientes, servidor WINS, e até mesmo agir como um Controlador Primário de Domínio (PDC).

Implementação:
A implementação desse serviço envolve a configuração do servidor, a definição dos recursos a serem
exportados e a configuração dos clientes.

Pré-requisitos:
* Sua rede deve estar corretamente instalada e configurada;
* As estações Windows® devem utilizar o protocolo TCP/IP.

Instalação:
Levando em consideração que já possui um FreeBSD instalado e com os ports atualizados, para instalar o SAMBA e seus aplicativos de configuração, são necessários os seguintes pacotes:
Neste tutorial usamos o FreeBSD 6.1-STABLE

# cd /usr/ports/net/samba3
# make install

Verifique o screen shows com as optições, e marque as que pretende utilizar:

Options for samba 3.0.7,1

[ ] LDAP With LDAP support
[ ] ADS With Active Directory support
[X] CUPS With CUPS printing support
[X] WINBIND With WinBIND support
[ ] ACL_SUPPORT With ACL support
[ ] SYSLOG With Syslog support
[ ] QUOTAS With Quota support
[X] UTMP With UTMP support
[ ] MSDFS With MSDFS support
[ ] SAM_XML With XML smbpasswd backend
[ ] SAM_MYSQL With MYSQL smbpasswd backend
[ ] SAM_PGSQL With PostgreSQL smbpasswd backend
[ ] SAM_OLD_LDAP With Samba2.x LDAP smbpasswd backend
[ ] PAM_SMBPASS With SMB PAM module
[X] POPT With installed POPT library

…Extracting samba-3.0.7,1

É possível a instalação básicado do Samba pelo comando pkg:
# pkg_add -vr samba

OBS: O Samba será instalado em /usr/local/etc/smb.conf. Temos apenas dois daemons, o smbd e o nmbd, que ficam em /usr/local/samba/sbin. O smbd é o responsável por controlar os compartilhamentos de arquivos assim como autenticação e autorização dos clientes. O nmbd auxilia com o browsing da rede e trabalha com NetBIOS (Network Basic Input/Output System) e WINS.

Depois do Samba instalado, ele ficará com a seguinte estrutura:
/usr/local/bin/testprns
/usr/local/bin/smbcquotas
/usr/local/bin/smbcacls
/usr/local/bin/wbinfo
/usr/local/bin/smbtree
/usr/local/bin/smbspool
/usr/local/bin/smbpasswd
/usr/local/bin/testparm
/usr/local/bin/smbcontrol
/usr/local/bin/ntlm_auth
/usr/local/bin/net

Este port instala o script de startup do network services em:
/usr/local/etc/rc.d/samba.sh

Não esqueça de chegar o rc.conf o samba deve estar lá pra startar.
samba_enable=”YES”

Para que ele chame o arquivo faça o seguinte:
Copie o arquivo como segue abaixo:
cd /usr/local/etc/
cp -p smb.conf.default smb.conf

Aqui fica um exemplo do arquivo também:
/usr/ports/net/samba3/work/samba-3.0.7/examples/smb.conf.default

Editando o arquivo de configuração do Samba:
Use o editor de sua preferencia ex. vi/vim, no FreBSD é comun as pessoas usarem o pico ou ee (easy edit). Não irei entrar no merito de explicar linha-a-linha da cofigurção do smb.conf caso tenha dúvidas, com uma pesquisa rápida da internet ou no próprio arquivo default do smb.conf é possível entende-lo completamente.

# vi /usr/local/etc/smb.conf
[global]
netbios name = Servidor
workgroup = REDE1
server string = PDC
security = user
hosts allow = 192.168.1. 127.
load printers = yes
printcap name = cups
printing = cups
log file = /var/log/samba/log.%m
max log size = 50
socket options = TCP_NODELAY
local master = yes
os level = 33
domain master = yes
preferred master = yes
domain logons = yes
logon script = logon.bat %U
logon home = \\%L\%U
preserve case = yes
short preserve case = yes
case sensitive = no
logon drive = H:
nt acl support = yes
logon path = \\%L\profiles\%U
admin users = root

# Lixeira:
recycle:exclude = *.tmp *.temp *.o *.obj ~$*
recycle:keeptree = True
recycle:touch = True
recycle:versions = True
recycle:noversions = .doc|.xls|.ppt
recycle:repository = .recycle/%U
recycle:maxsize = 10000000
vfs objects = recycle

# Bloqueando gravacao de arquivos do tipo:
veto files = /*.mp3/*.wmv/*.wma/*.ogg/*.avi

#=== Share Definitions ===
[netlogon]
path = /home/netlogon/
read only = yes
browseable = no
public = no
write list = ntadmin

[profiles]
path = /home/profiles/
browseable = no
writable = yes
valid users = %U
public = no
create mask = 1777
directory mask = 1777

[homes]
comment = Diretorio Pessoal
read only = no
browseable = no
public = no
create mode = 0640
directory mode = 0750

[Publico]
comment = Diretorio Publico
browseable = yes
writable = yes
create mask = 0777
directory mask = 0777
public = yes
path = /home/publico/

[Max]
comment = Diretorio Max
path = /dados/max/
read only = No
create mask = 0777
guest ok = Yes

Editando o Crontab:

# vi /etc/crontab
Adicione a seguite linha:

#limpeza da lixeira do home (tem horas que é preciso limpar a lixeira)
0 5 * * 7 root /usr/recycle.sh

Script do recycle.sh
#!/bin/sh
find /home/ -name “.recycle” -exec rm -Rf {}/* {} \;

Dicas importantes:

Cadastrando usuários:
Para começar a usar o Samba em modo WORKGROUP, o modo de Domínio exige que se usem as senhas criptografadas, lembrando que o Samba precisa seguir o padrão Microsoft se ele tem que falar com outros servidores e estações de trabalho.

Passos:
Cadastrando usuários no sistema:
1) Usários cadastrados no sistema.
2) Criar as senhas de acesso do usuário ao Domíio Samba.
3) Criar as contas “Trustee” no sistema.

Cadastrando máquinas:
Bem, uma conta de máquina não é muito diferente de uma conta de usuário. Apenas um “pequeno” detalhe: O nome da conta tem que ter um “$” no final, o que complica completamente a história, pois no FreeBSD esse caracter não é aceito normalmente como parte de uma username. Minha sugestão é que se siga o seguinte padrão:

Suponha que você tem um computador e você quer adicionar no domínio que tem o nome NETBIOS de COMP120. O nome da conta dele, portanto deveria ser comp120$. Sim em minúsculas, e com o $ no final.

Para fazer isso acrescente uma conta ao sistema, da maneira que você preferir, com o nome de comp120. Garanta que esse usuário/maquina não vai ter shell, não vai ter diretório home, e vai ter senha desabilitada

Basicamente uma entrada de uma “trusted machine” no /etc/passwd tem essa cara:

comp120$:*:5000:5001::0:0:Trusted Machine:/dev/null:/sbin/nologin

É necessário fazer para o Samba também:
Precisamos cadastrar a máquina Windows no domínio; Para isso basta o comando

# smbpasswd -a -m comp120
(SEM o $ no final, e com letras minúsculas).

Isso também gera uma entrada em /usr/local/private/smbpwaasd
Com isso o computador já vai ser conhecido no Domínio, mas ainda não vai ter acesso a ele.
Ele precisa ser oficialmente “acrescentado”, e isso é feito no próprio Windows, como vamos ver logo mais.

Quando se está na estação Win, e quer incluir no Domínio, vai aparecer uma janela pedindo username e password de um usuário com direitos de administrador. Tentei usar os usuários do grupo wheel, e nada. Retornava uns erro louco, e algumas vezes o processo do Samba apresentava um erro 6 ou 11, com mensagem INTERNAL ERROR nos logs, mas sem core dump.
Quando passei a usar o root, tudo funcionou!!!!

#Receita para cadastro de maquinas e usuarios para o sistema FreeBSD+Samba.

1.Adiciona um grupo de usuarios:
pw groupadd nome_do_grupo

2.Adiciona um usuario para para um grupo especifico:
pw useradd nome_do_usuario -g nome_do_grupo -m -d /home/nome_do_usuario

3.Adiciona um grupo de maquinas de dominio:
pw groupadd nome_do_grupo_de_maquinas_de_dominio

4.Cadastra uma conta de maquina de dominio:
pw useradd nome_da_maquina$ -c comentario -d /dev/null -s /sbin/nologin -g nome_do_grupo

5. Cadastra usuarios de outras redes (so para remoto) s/ home
pw useradd nome_do_usuario -g redeX -m -d /dev/null

OBS: os parametros sao:
-c Adiciona Comentario no login do usuario
-d Especifica onde sera o home do usuario (a opcao /dev/null significa que o usuario nao possui home)
-s Especifica o shell do usuario (a opcao /sbin/nologin significa que o usuario nao possui Shell)
-g Especifica o grupo que a estacao pertencera.

Utilizar o vipw para adicionar o sinal $ no final do login da maquina

5.Adiciona uma maquina no dominio do samba:
smbpasswd -a -m nome_da_maquina

6.Cadastra um novo usuario ao samba:
smbpasswd -a nome_do_usuario

7.Mais informacoes ver manual :-)

Bom agora vamos entender como foram criados os diretórios compartilhados:

[netlogon]
Estrutura: [root@megatron /home/netlogon]
[root@megatron /home/netlogon]# cat logon.bat
@echo off
echo “Logon Scritp Padrao das Redes”
echo “Aguarde efetuando login…”
echo “SO: %OS%”
echo “Usuario: %USERNAME%”
echo “Windows: %windir%”
echo “Logon de dominio %LOGONSERVER%”
echo “Mapeando Compartilhamentos”
net time \\Servidor /set /yes
net use p: \\Servidor\publico /persistent:yes
net use s: \\Servidor\maxicon /persistent:yes

Como pode ser observado foi criado o diretorio “netlogon” dentro do /home e dentro dele criamos o arquivo logon.bat com o conteúdo mostrado. Este bat faz com que as estações windows quando logarem mapearem seus respectivos diretórios, além do diretorio “pessoal” que é mapeado na unidade H: automaticamente como mostrado no arquivo do smb.conf – Vale lembrar um detalhe que este bat deve ser criado em uma maquina windows, caso queria usar no proprio FreeBSD faça o seguinte execute:
# u2dos arquivo.bat

[profiles]
Estrutura: [root@megatron /home/profiles]
Este diretório foi criado com as permissões especificadas para atuar como um “repositório” das estações logadas no PDC local onde fica armazenado os profiles de cada usuario logado.

[homes]
Estrutura: [root@megatron /home/users]
Exemplo de Permissão: [root@megatron /home/users]# ls -l
drwxr-xr-x 3 leila contabilidade 512 Mar 14 09:21 leila

O home como o nome já diz, é o diretório pessoal de cada usuário logado no PDC, este diretório é exclusivo do usuário, nehum outro pode ver, auterar, consultar neste diretório. Este diretório é criado automaticamente quando se cria o usuario no sistema. Lembre-se é possivel adicinar usuários sem que eles tenham home.

[Publico]
Estrutura: [root@megatron /home/publico]
Exemplo de permissão: [root@megatron /home/publico]# ls -l
drwxrwx— 33 admin contabilidade 1536 Apr 15 08:58 contabilidade

Aqui é possível criar diretório(s) de acordo com o que se deseja fazer, exemplo prático que adotamos foi criar dentro deste diretório vários outros de forma a separar por departamento, ou seja, um diretório do depto. contabilidade da empresa somente os usuários da contabilidade terão acesso, é possível inclusive atribuir a um determinado usuário o que ele poderá fazer num arquivo que esteja dentro deste diretório, e também pode-se dar permissão para um usuário que esteja fora desse grupo/departamento que possa acessar um arquivo/diretório da contabilidade. O método utilizado para isso foi criar grupos departamentais como: contabilidade, financeiro, administrativo, etc., e colocado os usuários
de acordo com o grupo/departamento que este pertence. Criamos também um diretório “Geral” onde neste é permitido que qualquer usuário possa ler, escrever e executar, ou seja permissão total dentro deste diretório. Veja abaixo como fica o /etc/group
contabilidade:*:1012:moiza,leila
Neste exemplo apenas a usuaria leila faz parte da contabilidade, porem o usuario moiza tem permissão neste diretorio, se tiver necessidade de colocar mais um usuário ao grupo basta acessar o /etc/group e colocar o nome dele a frente do grupo criado, verificar também o grupo de cada usuário desta forma:
[root@megatron /]# id leila
uid=1277(leila) gid=1012(contabilidade) groups=1012(contabilidade)

[root@megatron /]# id moiza
uid=1087(moiza) gid=1015(informatica) groups=1015(informatica), 1010(comercial), 1012(contabilidade)
Veja que o usuário moiza não só faz parte do grupo/diretório/departamento informática como também faz parte do grupo/diretório/departamento comercial e contabilidade.

[Max]
Estrutura: [root@megatron /dados/max]
Exemplo der permissão: [root@megatron /dados/max]# ls -l
drwxrwxr-x 23 max informatica 512 Mar 6 10:07 MAX

Por último, este diretório foi criado com o intuito de guardar a parte do Sistema de Gestão da empresa (executáveis), de forma que os usuários apenas leiam o seu conteúdo evitando assim acidentes. Talvez seja necessário aumentar a permissão de acesso em determinados diretórios/arquivo dentro deste, como foi o caso do subdiretório “[root@megatron /dados/max/MAX/Bloqueto]” este precisou de uma permissão de leitura/escrita/execução, pois o sistema necessita que seja gravados arquivos dentro deste subdiretório.

Troubleshooting:
Para testar seu samba faça o seguinte:
# testparm
Se o resultado foi apresentado sem erros, e seus compartilhamentos apareceram como se queria, basta startar seu samba.

Perfect Setup:
Abaixo exemplos de como colocar sua estação Windows XP no Domínio do Samba PDC.

Lembre-se de já ter criado a conta de usuário e máquina do FreeBSD e Samba.

1- Primeiramente se logue como Administrador da estação
2- É necessário que se coloque a estação primeiro no Grupo em que o Samba esta.
3- Depois de reiniciado a maquina execute o mesmo passo anterior colocando-o para o Dominio agora.
4- Agora é so logar na estação com o usuário/senha/domínio especificado.

Macete legal:
Caso não queira que essa estação tenha um perfil ambulante (móvel), basta seguir o exemplo abaixo:
Isto é util quando se quer que apenas algumas estações não façam uso do perfil ambulante, assim
não é necessário nenhuma alteração no smb.conf – Alguns admins de rede não gostam de utilizar este
tipo de perfil ambulante pelo fato do mesmo gerar um tráfego grande na rede, pois o mesmo faz uma
sincronização de todo perfil do usuario “C:\Documents and Settings\usuário”

1- Execute o comando “gpedit.msc”
2- E Ative “Só permitir perfis de usuários locais” em Modelos administrativos -> Sistemas -> Perfis de Usuário

Bom é isso…
/usr/local/etc/rc.d/samba.sh stop