terça-feira, fevereiro 13, 2007

Criar e usar um servidor SVN

Colaboração: Andre Murbach Maidl

Subversion é um software muito usado para controle de versões de sistemas. Muitas vezes desenvolvemos um projeto e precisamos ter um bom controle do seu versionamento, nesse caso o svn é uma ferramenta muito interessante.

Nesse documento estão descritas algumas maneiras de configurar um servidor svn e alguns comandos úteis para usá-lo.

Os pacotes necessários para a instalação e configuração são os seguintes:

  • httpd ou apache ou apache2 (depende da distribuição)
  • subversion
  • mod_dav_svn ou subversion-server ou libapache2-svn (depende da distribuição)

Partiremos do princípio que os pacotes necessários já estão instalados na máquina que será o servidor svn.

Criar um repositório svn no servidor

Nos passos abaixo usaremos um repositório chamado /svn, mas se desejar criá-lo em /home/usuario/svn, ou em qualquer outro local desejado, basta trocar /svn pelo qual será usado em seu servidor.

Antes de criar o repositório precisamos ter o diretório correspondente no sistema, por isso, use o comando abaixo para criá-lo:

  # mkdir /svn

Agora vamos executar o comando necessário para criar o repositório /svn, vale lembrar que o comando abaixo deve ser executado em um diretório vazio, porém, já existente no sistema, pois o subversion irá apenas criar toda a estrutura necessária para o controle de versões, então execute o comando abaixo para tal procedimento:

  # svnadmin create /svn

Vale uma observação aqui, até a versão 1.1 do subversion, o tipo de repositório padrão era o Berkeley DB, mas a partir da versão 1.2 o padrão passou a ser o FSFS. O suporte FSFS apareceu na versão 1.1. Na 1.0 apenas o Berkeley DB era suportado.

Para especificar o tipo do repositório pode-se usar o argumento --fs-type:

  # svnadmin create --fs-type fsfs /svn
# svnadmin create --fs-type bdb /svn

O repositório criado estará vazio e começará a contar a partir da revisão 0 (zero), a qual corresponderá à sua criação.

Para mais informações sobre o tipo do repositório acesse http://svnbook.red-bean.com/nightly/en/svn.reposadmin.html

Configurar o apache

O apache é usado porque além de ser o servidor http mais usual, através do módulo mod_dav_svn.so ele consegue acessar um repositório svn e torná-lo acessível para clientes que usam o protocolo WebDAV/DeltaV, (é o caso do comando svn, o qual veremos ainda neste documento), ele é uma extensão do protocolo HTTP.

Onde o arquivo de configuração, do subversion, é armazenado pode variar de distribuição para distribuição. Por exemplo, ele pode estar tanto em /etc/httpd/conf.d/subversion.conf, como em /etc/apache/conf/conf.d/subversion.conf, ou até mesmo em outro diretório.

Muitas vezes é possível localiza-lo através do comando locate:

  # locate subversion.conf

Por isso, neste documento, trataremos o arquivo de configuração apenas por: subversion.conf.

Vamos abordar duas formas de configuração, são elas:

  • acesso irrestrito para leitura e escrita (sem senha)
  • acesso irrestrito para leitura e acesso restrito para escrita (com senha)

Antes de tudo faça um backup do arquivo de configuração original:

  # cp subversion.conf subversion.conf.orig

Ajustar o dono do svn

Como vamos configurar o apache para o gerenciamento do repositório, é importante configurarmos o seu dono, pois estaremos lendo e escrevendo no svn através do protocolo HTTP.

Mude o dono do diretório /svn de root para apache:

  # chown -R apache.apache /svn

Essa modificação é necessária para que o svn fique acessível via http. Caso o usuário root continuasse como dono do diretório e dos demais arquivos, o apache não teria permissões para acessá-los. Em algumas distribuições o usuário chama-se www ao invés de apache, verifique o nome do usuário do apache antes de executar esse comando.

Acesso irrestrito para leitura e escrita

Abaixo segue um exemplo de configuração do arquivo subversion.conf para o acesso sem senha. Use-o caso deseje configurar um servidor svn sem senha.

  # inicio do arquivo subversion.conf

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so


DAV svn
SVNPath /svn
# desliga senha
SVNPathAuthz off


# fim do arquivo subversion.conf

Acesso irrestrito para leitura e acesso restrito para escrita

Abaixo segue um exemplo de configuração do arquivo subversion.conf para o acesso com senha. Use-o caso deseje configurar um servidor svn com senha para escrita.

  # inicio do arquivo subversion.conf

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so


DAV svn
SVNPath /svn
# autenticando um usuario
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /etc/svn-passwd
# qualquer operacao que nao seja leitura requer um usuario valido

Require valid-user



# fim do arquivo subversion.conf

Mais informações sobre como configurar o arquivo subversion.conf

Criar o arquivo de senha

Se o svn foi configurado com senha, como em um dos exemplos acima, será necessário criar o arquivo /etc/svn-passwd, ou o correspondente da sua configuração, onde serão armazenados os usuários, os quais terão acesso de escrita no repositório /svn e suas respectivas senhas.

Ele pode ser criado por meio do seguinte comando:

  # htpasswd -c /etc/svn-passwd root

O comando acima cria o arquivo /etc/svn-passwd e pede que a senha do usuário root seja informada.

Para adicionar um novo usuário pode-se usar o comando abaixo:

  # htpasswd /etc/svn-passwd andre

O usuário digita a senha e o arquivo é automaticamente atualizado. Ou o usuário executa o seguinte comando:

  # htpasswd -n andre

Envia o resultado do comando para o administrador do svn e ele inclui o usuário e a sua respectiva senha no arquivo correspondente.

Iniciar/Reiniciar o apache

Para efetivar as configurações e tornar o svn acessível através da url: http://nome_do_servidor/svn, precisamos iniciar o apache caso ele esteja parado ou reiniciá-lo, se ele já estiver sendo executado na máquina.

O comando abaixo reinicia o apache estando ele ligado ou desligado:

  # service httpd stop && service httpd start

Observe que o comando pode ser diferente dependendo da distribuição que estiver sendo usada, ou seja, ao invés de httpd pode ser apache ou até mesmo apache2.

Agora o seu repositório svn já pode ser acessado, usando um navegador qualquer, através do link:

http://servidor/svn

Se o servidor svn foi configurado em sua rede, em casa, e não há nenhum dns configurado, para responder pelos nomes das máquinas, pode-se usar apenas o ip do servidor:

http://ip_do_servidor/svn

Alguns comandos úteis para manusear projetos no svn configurado

Após criarmos um repositório svn é interessante conhecermos alguns comandos que possibilitam o manuseio desta ferramenta.

Se uma das variáveis de ambiente $SVN_EDITOR, $VISUAL ou $EDITOR não estiverem definidas, provavelmente uma mensagem de erro, semelhante a que segue abaixo, será exibida ao tentar efetuar uma alteração no svn.

svn: Could not use external editor to fetch log message; consider setting the $SVN_EDITOR environment variable or using the --message (-m) or --file (-F) options svn: None of the environment variables SVN_EDITOR, VISUAL or EDITOR is set, and no 'editor-cmd' run-time configuration option was found

Para definir o editor de texto padrão, o qual será usado para escrever os logs dos commits, pode-se usar a seguinte linha de comando:

  # export SVN_EDITOR='vim'

Acima definimos que o editor padrão será o vim.

Para que todos os usuários tenham essa variável configurada, basta adicionar a linha de comando acima no arquivo /etc/profile.

Criar um diretório no svn

Antes de adicionarmos um projeto em nosso repositório precisamos criar o diretório onde ele ficará armazenado. Pode-se fazer isso através do seguinte comando:

  # svn mkdir http://servidor/svn/projeto

Importar um projeto para o svn

Algumas vezes já temos um projeto em algum canto de nossa máquina; Importe-o para o svn usando a linha de comando abaixo:

  # svn import /tmp/projeto http://servidor/svn/projeto

O comando acima importará todos os arquivos do diretório /tmp/projeto para o repositório projeto em http://servidor/svn/

Uma outra maneira de executar o procedimento acima é acessar o diretório e então importá-lo para o svn:

  # cd /tmp/projeto
# svn import http://servidor/svn/projeto

Baixar um projeto do svn

Quando for preciso efetuar modificações em um projeto que já está no svn, antes é preciso fazer o checkout, ou seja, efetuar o download dos arquivos correspondentes ao projeto.

Efetuando o checkout:

  # svn co http://servidor/svn/projeto

Efetivar alterações em um projeto do svn

Depois de concluídas as modificações necessárias precisamos colocar a nova revisão do projeto no svn, para isso precisamos efetuar um commit.

De dentro do diretório principal do projeto efetue o commit:

  # svn commit

Listar arquivos de um projeto

Depois de efetuar várias mudanças em um projeto baixado do svn, é importante poder listar o seu conteúdo e saber quais arquivos estão armazenados e quais não estão no seu respectivo repositório no svn.

Para isso, execute o seguinte comando no diretório principal do projeto:

  # svn list

Adicionar arquivos a um projeto

No decorrer de um projeto novos arquivos surgem e precisam ser adicionados no repositório svn.

Para efetuar essa operação pode-se usar o seguinte comando:

  # svn add projeto.c

Quando o commit for efetuado, o arquivo projeto.c será adicionado à árvore correspondente do projeto em que estava trabalhando.

Remover arquivos de um projeto

A medida que arquivos vão sendo incluso no projetos, há a necessidade de excluir alguns.

Use o seguinte comando para efetuar tal operação:

  # svn rm projeto.c

É possível remover um projeto inteiro do svn, para isto basta executar:

  svn rm http://servidor/svn/projeto

Quando o commit for efetuado, o arquivo projeto.c será removido da árvore onde ele era armazenado e na nova revisão ele não fará mais parte do projeto.

Verificar as alterações antes de efetuar um commit

Na maioria das vezes é interessante, antes de efetuar o commit, verificar quais são as modificações. Para isso usamos o svn diff. Porém, se existirem muitas modificações, é preciso jogar a saída do comando para um editor de texto, sendo assim possível analisar todo o diff gerado.

Executando apenas o svn diff:

  svn diff

Jogando a saída para um editor de texto, no caso o vim:

  svn diff | vim -

Lembrando que o comando acima mostra as diferenças do diretório onde foi executado e o seu correspondente no svn. Para verificar todas as modificações de um projeto, basta executá-lo na raiz principal dele.

Verificar o log de um projeto Muitas vezes esquecemos o que fizemos, por isso, ao efetuar um commit o svn sempre pede uma mesagem para ser adicionada ao log do projeto. Para verificar os logs de um determinado projeto: efetue o checkout dele, acesse o diretório onde ele foi baixado e execute o seguinte comando:
  svn log
==Obter ajuda dos próprios comandos== Para verificar os comandos disponíveis use:
  svn help
Uma série de comandos, possíveis, será listada. Para obter informções sobre um comando em específico use:
  svn comando --help

segunda-feira, fevereiro 12, 2007

Configurando o Iptables e Fazendo Regras Básicas

Um sistema bem servido de firewall


Existem firewalls para todos os sistemas operacionais mas creio que nenhum deles esteja tão bem servido quanto o Linux. Sem desmerecer outros mas a solução Iptables ao meu ver é uma das melhores, senão a melhor que eu já vi para segurança de sistemas. A grande vantagem do Iptables é a sua estabilidade, rapidez, eficiência reconhecida e relativa facilidade de administração devido a sua configuração poder ser feita através de scripts. Outras características do Iptables:


.: Suporte aos protocolos TCP, UDP, ICMP
.: Pode se especificar portas de endereço e de destino.
.: Suporta módulos externos como FTP e IRC
.: Suporta um número ilimitado de regras por CHAINS ( correntes ).
.: Pode se criar regras de proteção contra ataques diversos
.: Suporte para roteamento de pacotes e redirecionamento de portas.
.: Suporta vários tipos de NAT, como o SNAT e DNAT e mascaramento.
.: Pode priorizar tráfego para determinados tipos de pacotes.
.: Entre outras o Iptables já tem suporte a IPV6, através do programa ip6tables.

O Iptables acompanha o kernel 2.4.x. Antes dele existia o Ipchains ( kernel 2.2.x ) e anteriormente ainda existia o Ipfwadm. Na realidade no kernel 2.4.x ainda existem os filtros Ipchains e Ipfwadm por motivos de compatibilidade mas ambos não estão ativos. Caso estejam ativos ( isto pode acontecer com o Ipchains ) é necessário desativá-los para que o Iptables possa funcionar plenamente.


Funcionamento


Através de regras poderemos fazer com que os pacotes possam ser ou não recebidos a rede toda, a determinada máquina, interface ou mesmo porta de conexão. O Iptables trabalha através de Tabelas, Chains e Regras:

Tabelas: Existem 3 tabelas possíveis de serem utilizadas no Iptables, sendo que uma delas, a mangle raramente é usada, restando a filter, que é a padrão, utilizada nos tráfegos de dados comuns, sem ocorrência de NAT. Quando não especificamos qual tabela a ser utilizada é ela que será ativada. A outra geralmente utilizada é a nat, que como o próprio nome diz, usada quando há ocorrência de NAT.

Chains: Através delas podemos especificar a situação do tratamento dos pacotes, seja qual tabela for.
Quando utilizamos a tabela nat as Chains possíveis são:

PREROUTING – Quando os pacotes entram para sofrerem NAT.
POSTROUTING – Quando os pacotes estão saindo após sofrerem NAT
OUTPUT – Pacotes que são gerados na própria máquina e que sofrerão NAT

Já com a tabela filter as Chains são:

INPUT - Pacotes cujo destino final é a própria máquina firewall.
OUTPUT – Pacotes que saem da máquina firewall
FORWARD – Pacote que atravessa a máquina firewall, cujo destino é uma outra máquina. Este pacote não sai da máquina firewall e sim de outra máquina da rede ou fonte. Neste caso a máquina firewall está repassando o pacote.

Regras: As regras de firewall geralmente são compostas de uma Tabela, Opção, Chain, Dados e Ação. Através destes elementos podemos especificar o que fazer com os pacotes.

Opções:

-P Define uma regra padrão

-A Acrescenta uma nova regra as existentes.
* Este tem prioridade sobre a -P



-D Apaga-se uma regra




-L Lista as regras existentes




-F Apaga todas as regras




-I Insere uma regra nova




-h Muito útil, pois mostra a ajuda



-R Substitui uma regra




-C Faz uma checagem das regras existentes



-Z Zera uma regra específica



-N Cria uma nova regra com um nome



-X Exclui uma regra específica pelo seu nome




Dados:

-s : Especifica o origem do pacote. Este pode ser tanto uma rede ou host. Possíveis combinações podem ser:

-s 192.168.0.0/255.255.255.0

ou

-s 192.168.0.0/24

OBS: No segundo caso estamos especificando a máscara de rede conforme o número de bits 1, por exemplo:

Máscara de rede 255.0.0.0 = 8
Máscara de rede 255.255.0.0 = 16
Máscara de rede 255.255.255.0 = 24


No exemplo acima estamos especificando toda uma rede de máscara C, no exemplo abaixo especificamos um host:

-s 192.168.30.51/255.255.255.255

ou

-s 192.168.30.51

também pode ser assim:

-s 192.168.30.51/32

OBS: A máscara em números de bits 1 para host é 32.


Podemos especificar assim também:

-s www tccamargo.com


Podemos especificar qualquer origem também:

-s 0.0.0.0/0.0.0.0

ou

-s 0/0


-d : Especifica o destino do pacote. A sintaxe é a mesma do -s


-p : Protocolo usado na regra. Pode ser tcp, udp, icmp:

-p tcp
-p udp
-p icmp


-i : Interface de entrada, ou seja, placa de rede, modem ou interface de conexão que estará recebendo o pacote a ser tratado.

-i eth0
-i eth1
-i ppp0


-o : Interface de saída. As sintaxes são as mesmas que -i, sendo que neste caso estará enviando o pacote a ser tratado.


! : Exclui determinado argumento:

-i ! eth0 - Refere-se a qualquer interface de entrada exceto a eth0
-s ! 192.168.0.45 – Refere-se a qualquer endereço de entrada exceto o 192.168.0.45


--sport : Refere-se a porta de origem. Este deve vir acompanhado das funções -p tcp e -p udp :

-p tcp –sport 80 – Refere-se a porta de origem 80 sob protocolo tcp


--dport : Refere-se a porta de destino. Assim como a função –sport, ela trabalha somente com a -p tcp e -p udp. A sintaxe é similar a –sport


Através das funções –sport e –dport podemos especificar não só uma porta específica como também um range de portas:

--sport 33435:33525


Ações:

As ações sempre vem após o parâmetro -j e geralmente são:

ACCEPT – Aceita e permite a passagem do pacote.
DROP – Não permite a passagem do pacote e abandona-o não dando sinais de recebimento.
REJECT – Assim como o DROP, não permite a passagem do pacote, mas envia um aviso ( icmp unreachable )
LOG – Cria um Log referente a regra em /var/log/messages


Com estes fatores podemos criar as nossas regras com a seguinte composição:

# iptables -A FORWARD -s 192.168.0.45 -p icmp -j DROP
Sendo: -A ( opção ) / FORWARD ( Chain ) / -s 192.168.0.45 -p icmp ( Dados ) -j DROP ( Ação )


No caso do exemplo a cima a regra determina que todos os pacotes icmp originários do endereço 192.168.0.45 devem ser barrados.


Salvando as regras


Depois das regras prontas podemos salvá-las com este comando:

# iptables-save >


Para recuperá-las use este comando:

# iptables-restore >


Outra forma seria fazer um script com as regras:

Corpo do Script

#!/bin/bash

#limpando tabelas
iptables -F &&
iptables -X &&
iptables -t nat -F &&
iptables -t nat -X &&

#liberando acesso interno da rede
iptables -A INPUT -p tcp --syn -s 192.168.1.0/255.255.255.0 -j ACCEPT &&
iptables -A OUTPUT -p tcp --syn -s 192.168.1.0/255.255.255.0 -j ACCEPT &&
iptables -A FORWARD -p tcp --syn -s 192.168.1.0/255.255.255.0 -j ACCEPT &&

#compartilhando a web na rede interna
iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth1 -j MASQUERADE &&
echo 1 > /proc/sys/net/ipv4/ip_forward &&

# Protecao contra port scanners ocultos
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

# Bloqueando tracertroute
iptables -A INPUT -p udp -s 0/0 -i eth1 --dport 33435:33525 -j DROP

#Protecoes contra ataques
iptables -A INPUT -m state --state INVALID -j DROP

#termina
echo "Iptables Pronto"


Salve-o com um nome sugestivo, como por exemplo “start-firewall”.

Dê permissão de execução:

chmod +x start-firewall


Pronto. Toda vez que quiser que ele seja habilitado é só executá-lo ( sempre como root ):

# start-firewall


Para não ter que ficar chamando o script toda vez que inicializar o sistema, podemos fazer com que ele seja ativado na inicialização. Para isso é preciso editar o arquivo

/etc/rc.d/rc.local e incluir o comando no final do arquivo.:-)



Compartilhamento de conexão, mascaramento e redirecionamento de pacotes


Verifique que nestas linhas do script exemplo:

iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth1 -j MASQUERADE &&
echo 1 > /proc/sys/net/ipv4/ip_forward &&


Estou fazendo com que os micros de minha rede possam utilizar a internet através do roteamento dinâmico. A linha que habilita o redirecionamento de pacotes é essa:

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

Mas vale observar que se inserirmos somente esta linha no script, a cada vez que reiniciar o sistema será necessária a ativação do roteamento. Para que não percamos o roteamento é necessário editar o arquivo /etc/sysctl.conf e inserirmos ou modificarmos a linha do modo que fique assim:

net.ipv4.ip_forward= 1


Voltando a nossa regra do script exemplo, verificamos uma ação nova ( MASQUERADE ), servindo para que as máquinas da rede interna possam acessar a internet usando o IP externo do Gateway. Deste modo as máquinas da rede interna ficarão invisíveis para a rede externa. Para que uma máquina da rede interna possa executar serviços onde cuja execução necessita que o IP da máquina seja visível para redes externas, será necessário fazer um redirecionamento de IPs ou portas.

Digamos que uma máquina de IP 192.168.0.45 precise executar um serviço de FTP, na qual é necessária a visibilidade da máquina. Podemos fazer com que a máquina firewall, cujo IP externo seja 200.135.100.102 receba estes pacotes e retransmita:

iptables -t nat -A PREROUTING -s 200.135.100.102 -i eth0 -j DNAT –to 192.168.0.45
iptables -t nat -A POSTROUTING -s 200.135.100.102 -o eth0 -p tcp –dport 21 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.45 -o eth0 -j SNAT –to 200.135.100.102
iptables -t nat -A POSTROUTING -s 192.168.0.45 -o eth0 -p tcp –dport 21 -j ACCEPT


Veja que nestas regras temos mais duas ações novas SNAT e DNAT:

SNAT – Aplicada quando queremos alterar o endereço de origem do pacote. Aqui nós utilizamos para fazer o mascaramento. OBS: Somente a Chain POSTROUTING pode ser usada na ação SNAT.
DNAT – Aplicada quando desejamos alterar o endereço de destino do pacote. Esta ação é utilizada para fazer redirecionamento de portas, redirecionamento de servidor, load balance e proxy transparente. As Chains que podem ser utilizadas para esta ação são PREROUTING e OUTPUT.

Além destas duas ações, existe também a REDIRECT que pode ser utilizada para fazer redirecionamento de portas. Quando fazemos um redirecionamento de portas usamos o dado –to-port após a ação REDIRECT:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT –to-port 3128

#Esta regra faz com que todos os pacotes direcionados a porta tcp 80 sejam redirecionados para a porta 3128.

Quando utilizamos a tabela nat, é preciso inserir o parâmetro -t para especificar a tabela:

-t nat

Perceba que quando omitimos este parâmetro usamos a tabela filter por padrão.
Além destas ações, veja que existe também um dado novo:

--to : Este dado serve para definir o IP ou porta de destino numa ação SNAT ou DNAT:

iptables -t nat -A PREROUTING -p tcp -d 200.135.100.102 –dport 80 -j DNAT –to 192.168.0.45

# Esta regra faz com que os pacotes direcionados a porta tcp 80 sejam redirecionados para a máquina 192.168.0.45 . Como não especificamos a porta, a máquina de destino receberá o pacote na porta 80

Além do IP podemos definir a porta deste endereço na ação:

iptables -t nat -A PREROUTING -p tcp -d 200.135.100.102 –dport 80 -j DNAT –to 192.168.0.45:3128

# Aqui, assim como na regra anterior, os pacotes são redirecionados para a máquina 192.168.0.45 mas neste caso especificamos a porta, ou seja, porta 3128


Algumas opções e observações


Vale fazer umas pequenas observações a respeito da ordem das regras e manejo. Uma delas é que a a primeira regra tem prioridade sobre a segunda caso ambas estejam em conflito, veja:

iptables -A FORWARD -p tcp --syn -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -p tcp --syn -s 192.168.1.0/24 -j DROP


A que terá valia será a primeira, ou seja:
iptables -A FORWARD -p tcp --syn -s 192.168.1.0/24 -j ACCEPT


Podemos ver todas as regras em andamento ao darmos o comando:

iptables -L


Com os comandos abaixo limpamos todas as tabelas e regras:

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X


Para que tudo possa funcionar a contento é necessário primeiramente que todos os módulos necessários estejam carregados:

modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ip_queue
modprobe ip_tables
modprobe ipt_LOG
modprobe ipt_MARK
modprobe ipt_MASQUERADE
modprobe ipt_MIRROR
modprobe ipt_REDIRECT
modprobe ipt_REJECT
modprobe ipt_TCPMSS
modprobe ipt_TOS
modprobe ipt_limit
modprobe ipt_mac
modprobe ipt_mark
modprobe ipt_multiport
modprobe ipt_owner
modprobe ipt_state
modprobe ipt_tcpmss
modprobe ipt_tos
modprobe ipt_unclean
modprobe iptable_filter
modprobe iptable_mangle
modprobe iptable_nat


É importante ressaltar que as regras devem seguir uma ordem definida, ou seja, a regra posterior deve estar de acordo com a regra anterior para que tudo corra sem problemas.:

iptables -P FORWARD -j DROP
iptables -A FORMARD -s 192.168.0.0/24 -d 10.0.0.0/8 -j ACCEPT


Através desta regra, determinamos que todo o repasse de pacotes seja bloqueado, depois permitimos que possa repassar pacotes da rede 192.168.0.0 para a rede 10.0.0.0 mas esta não poderá retornar os pacotes. Então o correto seria inserir mais uma regra aqui:

iptables -A FORWARD -d 192.168.0.0/24 -s 10.0.0.0/8 -j ACCEPT


Para que a rede 10.0.0.0 possa repassar os pacotes, fazendo deste jeito com que as redes possam conversar sem problemas.

Ao fazer as regras lembre-se de primeiro bloquear, depois abrir o acesso.:

iptables -P FORMARD -j DROP
iptables -A FORWARD -s 192.168.0.45 -p tcp –sport 80 -j ACCEPT


Considerações finais


Iptables tem infinitas possibilidades de regras. É impossível citar todos os parâmetros e regras que podem ser utilizados, pois daria uma verdadeira bíblia. Cabe ao bom administrador estudar com afinco para poder aplicar as regras mais convenientes para a sua rede. E o usuário final tem em mãos um excelente recurso para deixar sua máquina protegida de ataques externos. Esta é a grande vantagem do Iptables, pode se aplicar regras conforme a conveniência da rede e usuários. Sem dúvida nenhuma é uma ferramenta poderosíssima.



Exemplos de regras comumente utilizadas


Nas linhas abaixo incluí algumas regras que são comumente utilizadas. Algumas destas podem ser úteis para fazer o seu firewall mas lembre-se de adaptá-las para sua rede/interface/máquina antes de aplicá-las:


#Libera o apache pra web
iptables -A INPUT -p tcp --destination-port 6080 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 443 -j ACCEPT

#Libera o loopback
iptables -A OUTPUT -p tcp --syn -s 127.0.0.1/255.0.0.0 -j ACCEPT

#Bloqueando todos os endereços vindo de uma determinada rede para a minha máquina
iptables -A INPUT -s 10.0.0.0/8 -j DROP

#Liberando o endereço vindo de uma rede para a minha máquina
iptables -A INPUT -s 10.0.0.1 -j ACCEPT

#Gerando Logs de Portas proibidas
iptables -A INPUT -p tcp --dport 21 -j --log-prefix "Serviço de FTP"

#Gerando log de Backdoors
iptables -A INPUT -p tcp --dport 5042 -j LOG -log-prefix "Wincrash"
iptables -A INPUT -p tcp --dport 12345 -j LOG -log-prefix "backOrifice"
iptables -A INPUT -p tcp --dport 12346 -j LOG -log-prefix "backOrifice"

#Habilitando porta de FTP
iptables -A INPUT -p tcp -s 192.168.0.45 --dport 21 -j ACCEPT

#Habilitando porta de SSH
iptables -A INPUT -p tcp -s 192.168.0.45 --dport 22 -j ACCEPT

#Habilitando porta de SMTP
iptables -A INPUT -p tcp -s 192.168.0.45 --dport 25 -j ACCEPT

#Habilitando porta de DNS
iptables -A INPUT -p tcp -s 192.168.0.45 --dport 53 -j ACCEPT

#Habilitando porta de POP3
iptables -A INPUT -p tcp -s 192.168.0.45 --dport 110 -j ACCEPT

#Habilitando porta de DNS (UDP)
iptables -A INPUT -p udp -s 192.168.0.45 --source-port 53 -j ACCEPT

#Redirecionar Porta
iptables -t nat -A PREROUTING -s IP_NET -i EXT_INT -j DNAT --to IP_DESTINO
iptables -t nat -A POSTROUTING -s IP_NET -o EXT_INT -p tcp --dport PORT -j ACCEPT
iptables -t nat -A POSTROUTING -s IP_DESTINO -o EXT_INT -j SNAT --to IP_NET
iptables -t nat -A POSTROUTING -s IP_DESTINO -o EXT_INT --p tcp --dport PORT -j ACCEPT

IP_NET = IP válido da internet.
EXT_INT = Interface da Internet.
IP_DESTINO = IP inválido da Internet ou melhor ip da rede que vai fazer redirecionamento.
PORT = porta

#Fazendo redirecionamento de portas
iptables -t nat -A PREROUTING -i FACE -p tcp --dport 80 -j REDIRECT --to-port 3128

FACE = interface de rede

#Bloqueando todos os pacotes originários da rede 10.0.0.0 para o host www.tccamargo.com
iptables -A FORWARD -s 10.0.0.0/8 -d www.tccamargo.com -j DROP

#Liberando todos os pacotes originários da rede 10.0.0.0 para o host www.tccamargo.com
iptables -A FORWARD -s 10.0.0.0/8 -d www.tccamargo.com -j ACCEPT

#Liberando todos os pacotes tcp destinados a porta 25
iptables -A FORWARD -p tcp --dport 25 -j ACCEPT

#Liberando acesso interno da rede
iptables -A INPUT -p tcp --syn -s 192.168.1.0/24 -j ACCEPT
iptables -A OUTPUT -p tcp --syn -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -p tcp --syn -s 192.168.1.0/24 -j ACCEPT

#compartilhando a web na rede interna
iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth1 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward &&

#Libera Bittorrent somente para esta maquina
iptables -A INPUT -p tcp --destination-port 6881:6889 -j ACCEPT

#Bloqueando tracertroute
iptables -A INPUT -p udp -s 0/0 -i eth1 --dport 33435:33525 -j DROP

#Protecoes contra ataques
iptables -A INPUT -m state --state INVALID -j DROP

#Bloqueando uma máquina pelo endereço MAC
iptables -A INPUT -m mac --mac-source XX:XX:XX:XX:XX:XX -j DROP

#Proteção contra IP Spoofing
iptables -A INPUT -s 172.16.0.0/16 -i ext_face -j DROP
iptables -A INPUT -s 192.168.0.0/24 -i ext_face -j DROP
iptables -A INPUT -s 192.168.0.0/24 -i ext_face -j DROP

< ext_face =" São">

#Proteção contra Syn-floods
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

#Proteção contra port scanners ocultos
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

#Proteção contra ping da morte
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

#Bloqueando ping de um ip
iptables -A INPUT -p icmp -s 192.168.1.1/24 -j DROP

#Bloqueando pacotes fragmentados
iptables -A INPUT -i INTEXT -m unclean -j log_unclean
iptables -A INPUT -f -i INTEXT -j log_fragment

< intext =" Interface">

#Anulando as respostas a ICMP 8 (echo reply)
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

sexta-feira, fevereiro 09, 2007

Configurando Samba no FreeBSD

Enviado por DarkWarrior em Qua, 2007-01-17 14:26.

Autor: João Dantas
eMail: presley[NOSPAM]linuxbsd.com.br>
Data: 2003

Neste artigo, estaremos configurando o Software SAMBA para compartilhamento de serviços e arquivos em um Sistema FreeBSD 4.7, o mesmo deverá funcionar com versões não muito anteriores ou posteriores. Se você não tem o samba instalado no seu FreeBSD, você pode instalá-los de duas formas: pelos ports ou via CD de instalação do Sistema. Existe também a opção de compilar os fontes, baixando os pacotes do http://www.samba.org, mas não enfatizaremos esta opção, levando em consideração a praticidade de instala-los via ports ou via CD.

Passos para instalar via CD

- Primeiramente monte o CD:
# mount –t cd 9660 /dev/acd0c /cdrom
depois, navegue pelo caminho onde estao os arquivos do samba, no meu caso o caminho foi:
# cd /cdrom/packages/net/samba-xxx.xxx.xxx
Para instalá-lo, use o comando de instalação do FreeBSD:
# pkg_add samba-xxx.xxx.xxx

Passos para instalar via ports:

# cd /usr/ports/net/samba
# make
# make install
# make clean
ou melhor
# make && make install && make clean

Pronto, agora é so esperar ele fazer o download do servidor, compilar os pacotes, instalar e limpar os fragmentos, em seguida o seu Samba já vai estar instalado em seu sistema.

Inicializando o SAMBA

Você pode inicializar o samba pelo shell, mas mostraremos como fazê-lo iniciar pelo modo autmotático, no carregamento do sistema.
Localize o script de inicialização do samba com o comando:
# find / -iname samba.sh.sample
Normalmente o samba instala-o em: /usr/local/etc/rc.d/samba.sh.sample.
em seguida renomei ou copie para o diretório de inicialização:
# cp -v /caminho/do/samba.sh.sample /usr/local/etc/rc.d/
vamos ativar agora o script:
# mv samba.sh.sample samba.sh
# chmod 0755 samba.sh
Se quiser iniciar o samba pelo terminal, digite:
# /usr/local/etc/rc.d/samba.sh start
Para parar os serviços, digite:
# /usr/local/etc/rc.d/samba.sh stop
Pronto, agora o samba iniciará normalmente junto com o sistema ou pelo shell.

Criando os usuários samba e usuários FreeBSD

Utilize o comando adduser para criar o usuário:
# adduser usuario [ENTER]

Na primeira opção (Usernames must match regular expression) digite ENTER para colocar as configurações padrão. Apartir dai, continue dando ENTER para aceitar as configurações do sistema. Quando você chegar na opção de (Enter Username), você especificará o nome do usuário, no nosso caso: usuario, em seguida continue dando ENTER até chegar na parte da senha.
Pronto, iremos agora anexar este usuário criado ao samba com o comando smbpasswd:
# smbpasswd -a usuario [ENTER]
ATENÇÃO: A senha tem que ser a mesma do usuário criado com o comando adduser.

Configurando o smb.conf

Edite o arquivo smb.conf em usr/local/etc/smb.conf com o editor de sua preferência. Para configurar o smb.conf (o arquivo de configuração do SAMBA) é necessário estar por dentro de algumas informações, para que você consiga adequar ao seu tipo de rede. Estarei mostrando aqui o básico, para que seu servidor funcione de maneira eficaz. Abaixo estarei listando as principais variáveis do arquivo smb.conf. Deixa-as nesse padrão logo abaixo, para que possamos trabalhar com o servidor SMB (protocolo do samba):

SEÇÃO GLOBALS

# Grupo de trabalhos de sua rede.
workgroup = GRUPO
# O nome de seu host para a rede.
netbios name = MICRO
# Uma descrição do host SAMBA.
Server string = Servidor de arquivos
# Defina como user, afim de compartilhar arquivos e serviços.
Security = user
# Necessário para redes Win9x.
Encrypt password = yes
Local master = yes
Preferred = yes
# Aqui você especifica a sua sub-rede.
Hosts.allow = 192.168.0
# Deixe esta opção por padrão em NO.
Win support = no
# Se você tiver um servidor DNS, coloque o IP dele, caso contrário deixe NO.
Wins server = 192.168.0.1
# Padrão deixar em NO estas opções.
Wins proxy = no
Dns proxy = no

SEÇÃO SHARE

# Nota: O nome compartilha, é o nome da pasta que irá aparecer na rede.
[COMPARTILHA]
# Comentário que aparece na descrição da pasta no acesso a rede Win para o Samba.
comment = Compartilhamento de arquivos
# caminho do compartilhamento.
path = /home/
read only = yes
# Deixe esta opção como NO, afim de que possamos criar os users para acesso, caso contrário, todos terão acesso.
guest ok = no
# Aqui vem o nome do usuário criado que terá acesso a pasta especificada no path.
valid users = usuario
browseable = yes

ACESSANDO A REDE WIN COM O SAMBA

Se tudo deu certo, vamos agora acessar uma maquina Win. Primeiro crie um diretorio na raiz (/):
# mkdir compartilha
para montar o compartilhamento, use os comandos:
- Acessando máquina Windows por IP do host:
# mount_smbfs -I 192.168.0.13 //host_windows98/pasta /compartilha [ENTER]
- Acessando pelo Netbios name da rede Win:
# mount_smbfs -I host_windows98 //host_windows98/pasta /compartilha [ENTER]
Ele vai lhe pedir a senha de acesso, no caso da pasta do host_windows98 tiver senha, digite-a e pronto.
- Se quiser desmontar, use:
# umount //host_windows98/pasta /compartilha

Para acessar nosso servidor SAMBA FreeBSD em maquinas Windows, log com o usuário criado e senhas especificadas.

Espero que esse tutorial possa ajudar os colegas de alguma forma.
Um grande Abraço a Todos!

Talking about the BSD family of free operating systems

http://bsdtalk.blogspot.com/

bsdmall

http://www.bsdmall.com/

FreeBSD Java™ Project

http://www.freebsd.org/java/index.html

Konqueror & Flash HowTo

Prerequisites

You need to be running either FreeBSD 6.1

For KDE versions older than KDE 3.4.0, you also you need to install the konqueror-nsplugins port

Caveat

Note: Sound does not work with wrapped Flash 7. If you require sound, the only option at the time being is installing the linux-firefox port and using the plugin there.

Installing Flash

Since the Flash Player from Macromedia is only distributed in binary form and only for Linux, we need to install a wrapper to make it accessible for Konqueror. Install linuxpluginwrapper and the actual Flash Player linux-flashplugin7 from ports:

cd /usr/ports/www/linuxpluginwrapper && make install clean
cd /usr/ports/www/linux-flashplugin7 && make install clean

Next, edit your /etc/libmap.conf and add the following lines (if it does not exist, create it):

[/usr/local/lib/npapi/linux-flashplugin/libflashplayer.so]
libpthread.so.0 pluginwrapper/flash6.so
libdl.so.2 pluginwrapper/flash6.so
libz.so.1 libz.so
libstdc++-libc6.2-2.so.3 libstdc++.so
libm.so.6 libm.so
libc.so.6 pluginwrapper/flash6.so

Setting up Konqueror

In order for Konqueror to find the plugin for the Flash Player, you might have to add an additional search-path to the plugins-section of Konqueror's settings.

  • Open Konqueror.
  • In the Konqueror menubar, traverse the submenus until you arrive at:
    Settings -> Configure Konqueror -> Plugins
  • Check the screenshot below. If you're missing a path that's shown in the screenshot, add it.
  • Proceed to the Scan tab.
  • Select the Scan for New Plugins button.
Configure Konqueror plugins

Plugins are now searched and if everything worked well, you should see an entry for the Flash-plugin when you switch to the Plugins tab.

Successful detection of the flash-plugin

The installation is finished.

sexta-feira, dezembro 22, 2006

Bro Offline Packet Analysis(DPD Enabled)

Bro-ids is a beast, you will have to spend some times to actually understand how it works, or maybe just understand it partially. There's no good guide that you can find regarding Bro-ids, the only thing you can do is either subscribing to the mailing list, or either reading Bro-ids Wiki or maybe reading its codes(Ouch). The documentation that comes with Bro-ids is rather old. I think most of people out there are using Snort, it is lightweight, snort related documentation and books are everywhere too. I will have to admit that Bro-ids is not very easy to use but you can find it very powerful from time to time. Anyway you can download it at here, to install it -

shell>tar xvzf bro-1.2-devel.tar.gz

shell>cd bro-1.2-devel

shell>./configure --prefix=/usr/local/stow/bro-1.2-devel

shell>make && make install

You will have to run make install-brolite so that configuration can be done easily. Once you have finished the configuration, now let's navigate the installed bro. The reason why I choose to install bro in non-standard directory because it will be more easy for us when we need to either remove or upgrade it next time.

shell>ls -la /usr/local/stow/bro-1.2-devel/
total 38
drwxr-xr-x 16 bro wheel 512 Dec 15 19:33 .
drwxr-xr-x 16 root wheel 512 Dec 12 14:35 ..
drwxr-xr-x 2 bro wheel 512 Dec 6 09:17 archive
drwxr-xr-x 2 bro wheel 512 Dec 6 10:00 bin
drwxr-xr-x 5 bro wheel 512 Dec 6 10:00 doc
drwxr-xr-x 2 bro wheel 512 Dec 6 12:23 etc
drwxr-xr-x 2 bro wheel 512 Dec 6 09:57 include
drwxr-xr-x 2 bro wheel 512 Dec 6 09:57 lib
drwxr-xr-x 4 bro wheel 5632 Dec 15 16:04 logs
drwxr-xr-x 3 bro wheel 512 Dec 6 10:08 perl
drwxr-xr-x 4 bro wheel 4096 Dec 15 19:34 policy
drwxr-xr-x 2 bro wheel 512 Dec 6 09:17 reports
drwxr-xr-x 2 bro wheel 512 Dec 6 10:08 scripts
drwxr-xr-x 4 bro wheel 512 Dec 6 09:14 share
drwxr-xr-x 2 bro wheel 512 Dec 6 12:42 site
drwxr-xr-x 2 bro wheel 512 Dec 15 16:04 var

I won't be going through every directory and explaining them one by one, however you should look at site which is used to store your site configuration, you should check and tune the configuration of the files in site directory especially the one with your hostname as prefix. By default brolite is enabled to load all the default policies.

@load brolite

One of the thing you can do is enable the Snort signatures matching by uncomment the following line -

# To run signatures, uncomment the following line.
@load brolite-sigs

The next directory that are important is etc(configuration directory), you may find most of bro path variables are stored in bro.cfg in etc directory. Then comes to policy script, this directory needs a lot of tuning depends on your network environment. You can actually checkout brolite.bro script inside policy directory to see what is loaded by default. Other directories that are shown pretty self descriptive so I won't touch on that.

Since this post is about Bro-IDS Offline Packet Analysis, I will just talk about it. To actually do it, I will have to add or append the following part to .bash_profile since my environment variables are stored there(I'm using bash), you should change it if you use different shell.

BROHOME=/usr/local/stow/bro-1.2-devel
BROPATH=/usr/local/stow/bro-1.2-devel/policy:/usr/local/stow/bro-1.2-devel/site

export PATH PACKAGESITE BROHOME BROPATH

Since I don't have clue for the first time how I can use bro with DPD(dynamic protocol detection), I refer to the brolite.bro to get to know which analyzers are needed if I want dynamic protocol detection. Here's the entry of brolite.bro

.....
## Dynamic Protocol Detection configuration
#
# This is off by default, as it requires a more powerful Bro host.
# Uncomment next line to activate.
const use_dpd = T;

@ifdef ( use_dpd )
@load dpd
@load irc-bot
@load dyn-disable
@load detect-protocols
@load detect-protocols-http
@load proxy

# By default, DPD looks at all traffic except port 80.
# For lightly loaded networks, comment out the restrict_filters line.
# For heavily loaded networks, try adding addition ports (e.g., 25) to
# the restrict filters.
redef capture_filters += [ ["tcp"] = "tcp" ];
# redef restrict_filters += [ ["not-http"] = "not (port 80)" ];
@endif
.....

The default offline packet analysis can be done by using mt.bro which is located at policy directory. Here's the content of my mt.bro -

# $Id: mt.bro 340 2004-09-09 06:38:27Z vern $

@load alarm
@load dns-lookup
@load hot
@load frag
@load tcp
@load scan
@load weird
@load finger
@load ident
@load ftp
@load login
@load portmapper
@load ntp
@load tftp
@load profiling
# Loading DPD
@load dpd
@load irc-bot
@load dyn-disable
@load detect-protocols
@load detect-protocols-http
@load proxy

You should see I have added the dynamic protocol detection(DPD) to mt.bro so that I can use the latest DPD when doing offline traffic analysis.

Running bro offline packet analysis
shell>bro -f tcp -r 060915-Event.pcap mt

After bro is successfully executed, you may find all the logs in current directory.

shell>ls -la *.log
-rw-r--r-- 1 root wheel 0 Dec 11 14:27 alarm.log
-rw-r--r-- 1 root wheel 0 Dec 11 14:27 conn.log
-rw-r--r-- 1 root wheel 0 Dec 11 14:27 ftp.log
-rw-r--r-- 1 root wheel 0 Dec 11 14:27 irc-bots.log
-rw-r--r-- 1 root wheel 104 Dec 11 14:01 irc-bots.summary.log
-rw-r--r-- 1 root wheel 0 Dec 11 14:27 irc.detailed.log
-rw-r--r-- 1 root wheel 0 Dec 11 14:27 irc.log
-rw-r--r-- 1 root wheel 0 Dec 11 14:27 notice.log
-rw-r--r-- 1 root wheel 0 Dec 11 14:27 prof.log
-rw-r--r-- 1 root wheel 0 Dec 11 14:27 signatures.log
-rw-r--r-- 1 root wheel 0 Dec 11 14:27 weird.log

Dynamic Protocol Detection is still new or considered in early developemet, we will see more and more protocols will be supported in future. Interestingly, you can print all the bpf filter expressions of mt.bro

shell>bro -f tcp mt print-filter
(((((((((((ip[6:2] & 0x3fff != 0) and tcp) or (port 111)) or (tcp[13] & 7 != 0)) or (port 6667)) or (port finger)) or (port telnet or tcp port 513)) or (udp port 123)) or (port ftp)) or (tcp port 113)) or (udp port 69)) or (port 6666)

By the way I'm using the wrong term - Offline Packet Analysis, Bro doesn't work that way, it is more of Offline Traffic Analysis instead as it analyses the full network stream instead of packet wise.

Enjoy (;])

Irresistable

Working as sysadmin means that you will have to watch your puter screen most of the time, thus it is good to setup prefferable working environment. While you can't change your office layout, I'm sure you can change your screenie which don't kill. Most of my friends know that I prefer simple and slick style over anything, and I can't resist to show off my Fluxbox screenshot - it is too sexy to be true and serves as perfect workspace at least for me.


Thanks to tenner for his fluxbox style - litebox, you always rox!

Cheers ;)

P/S: Please learn to appreciate beautiful things :P

Qemu Network on Linux

If some of you have downloaded my OpenBSD Sguil qemu image, and you happen to use linux, I suggest you take a look at this post which explain how to get qemu networking works on Linux. By the way if you like the work of Snort-Inline, just drop by to the blog and say hi to Victor.

http://www.inliniac.net/blog/?p=56


Thanks to Victor, this is the late post from me indeed.

Cheers :)

sexta-feira, dezembro 15, 2006

Fidelização -Telefonia Móvel

O conceito é justo. Você compra um telefone por um preço muito abaixo do valor real. Em troca, se compromete a utilizar os serviços de uma operadora por determinado período. Bolas, há telefones por R$1,00 anunciados no jornal. Faz todo o sentido do mundo. Ninguém dá nada de graça, a operadora fica feliz pois pode contabilizar seu plano como receita garantida, você fica feliz pois evita uma despesa às vezes grande, o fabricante fica feliz pois foi pago do mesmo jeito.

Usuários de planos pré-pagos não contam com cláusulas de fidelização, óbvio. Assim seus telefones em geral são cobrados integralmente. É justo? Claro, pombas. Tradicionalmente pré-pago consome menos que pós. Ninguém garante que o sujeito vai pegar o telefone da empresa A e não usar com o SIM-CARD da empresa B. Dessa forma, a cobrança mais alta.

No caso do pós-pago, a fidelização é aplicada via bloqueio, o SIM-LOCK.


SIM-LOCK
Com esse bloqueio somente chips de uma operadora específica funcionam no aparelho. Um aparelho da Claro está liberado para funcionar com chips da Claro somente, e por aí vai. Assim, o usuário não pode utilizar seu aparelho subsidiado com chips de terceiros. Isso não é justo por três motivos:

1 - Os aparelhos pré-pagos não são subsidiados. Você paga preço integral por eles. Não há qualquer vantagem ou vínculo com a operadora. Mesmo assim, aplicam o SIM-LOCK, você se torna um pré-pago com fidelização forçada

2 - Clientes pós-pagos são fidelizados por contrato. Se você for roubado, esmagar seu telefone atirando-o na parede (já fiz isso, com um T610) ou seu cachorro comê-lo, não interessa. Seu contrato tem que ser cumprido. Isso significa de 12 a 18 meses de pagamento de assinatura mínima, ou uma multa bem salgada. Se o aparelho é irrelevante para a aplicação do contrato, para quê o SIM-LOCK?

3 - Clientes de pós-pago que perdem seu aparelho ou são roubados estão sujeitos à boa-vontade da operadora. Como minha conta tinha valores absurdos, fruto de toneladas de ligações DDD, consegui um 6600 por R$70,00 mas a oferta inicial da Claro para reposição foi: R$25,00 de desconto num aparelho novo (com preço de pré-pago) mais 12 meses adicionais de fidelização. Como diz um amigo meu … “Fritas acompanham?”

Em resumo: O aparelho é seu, você comprou e pagou por ele. Sua fidelização independe do equipamento.

Desbloqueio Oficial
Por ordem da ANATEL, as operadoras são obrigadas a desbloquear gratuitamente os aparelhos com mais de um ano de contrato. Não sei como isso funciona para os pré-pagos.

Na prática isso implica em enviar carta (não email, carta) com documentação, aguardar um prazo indeterminado, esperar a boa-vontade deles e então ser encaminhado para uma assistência técnica. Desbloqueio via operadora antes disso, só pagando. Em média, R$100,00




Ubuntu Satanic edition

O Ubuntu Satanic Edition não é uma distribuição, mas uma série de temas para transformar o visual do Ubuntu. Você precisa ter a distribuição Ubuntu já instala em seu computador.

Veja screenshots e saiba mais em: http://parker1.co.uk/satanic/

PHP esta presente em 34,13% dos web sites

Pesquisa recente disponibilizada pela Nexen [1], mostra a evolução de utilização do PHP na construção de Web Site. O gráfico mostrado é o resultado da evolução até o mês de Novembro/2006.

http://e-ti.blogspot.com/2006/[...]nte-em-3413-dos-web-sites.html

Ubuntu Linux, o rei das distribuições em 2006

De acordo com o Google Trends, Distrowatch e OS News a distribuição Ubuntu com maior "mind share" e o site OS News acredita que a distribuição com maior "market share" no desktop seja também Ubuntu.


Google Trends: http://www.google.com/trends?q[...]ab=0&geo=all&date=2006

Fonte: http://www.osnews.com/story.php?news_id=16681

Java SE 6 lançado

Depois de mais de 2 anos de desenvolvimento, a Sun está lançando a última versão de seu software "Java Platform Standard Edition" (Java SE), criando ênfase em particular no suporte a outras linguagens de scripting.


O Java SE 6 é a primeira versão do software em que os desenvolvedores poderão misturar tecnologia Java com outras linguagens tais como PHP, Python, Ruby e JavaScript.
https://scripting.dev.java.net/
http://java.sun.com/javase/6/

Fonte: http://www.linuxworld.com.au/index.php/id;1102901659;fp;16;fpid;0

Lego publica os fontes do firmware do NTX

A Lego acaba de publicar os fontes do firmware do Mindstorms NXT sob licença Open Source.

Confira: http://mindstorms.lego.com/Overview/OpenSource.aspx

Fonte: http://barrapunto.com/articles/06/12/11/2040245.shtml

Qual será o Futuro do Linux?

Acho que todos nós, um dia, nos pegamos pensando no que espera o pinguim em um futuro que ainda se mostra nebuloso. Com a velocidade das mudanças, as possibilidades do que espera o Linux crescem e, em dois artigos, que defendem pontos de vista contrários, Kaiting Chen e Dmitrij D. Czarkoff debatem sobre o assunto.

Depois de 15 anos de vida, muitas pessoas começam a se perguntar sobre o que espera o pingüim no futuro. Em duas interessantes análises de pontos de vista contrários, Kaiting Chen e Dmitrij D. Czarkoff confrontam-se e debatem sobre esse assunto nos artigos intitulados “A guerra pelo Linux está Perdida – Quase” e “A guerra pelo Linux nem mesmo existe; Não está perdida de qualquer maneira”.
Os argumentos usados por ambos os autores baseiam-se na ampla experiência profissional de cada um com o Linux e traçam possibilidades interessantes para o que espera os usuários em um futuro não muito distante.
Leia:
A guerra pelo Linux está Perdida – Quase:
http://www.linux-fedora.org/xo[...]les/articles/article.php?id=17
A guerra pelo Linux nem mesmo existe; Não está perdida de qualquer maneira:
http://www.linux-fedora.org/xo[...]les/articles/article.php?id=16

"Eu compraria um Mac se não trabalhasse para a Microsoft"

"Um antigo chefe de desenvolvimento Windows, James Allchin, escreveu em janeiro de 2004 um e-mail para o CEO da companhia, Steve Ballmer e para o fundador, Bill Gates, que a empresa havia perdido o sinal das necessidades dos clientes e que compraria um Mac se não trabalhasse para a Microsoft."


Fonte: http://idgnow.uol.com.br/merca[...]-12.4171095040/IDGNoticia_view

OpenOffice 2.1 é publicado


Segundo pode-se ler no site do projeto OpenOffice.org, acaba de ser publicada a versão 2.1 do OpenOffice, com versões para GNU/Linux, FreeBSD, Windows, Macintosh e Solaris. Suas principaís novidades com relação à versão anterior são o suporte para vários monitores no Impress, a melhoria do suporte para exportar folhas de cálculo em HTML e do suporte para Access no Base.

Confira: http://download.openoffice.org/2.1.0/index.html

KERNEL LINUX - current

Kernel 2.6.19.1


Está disponível para download a primeira atualização estável para o Kernel 2.6.19.

Mais em: http://lwn.net/Articles/213657/

Download em: http://www.kernel.org/

Vídeo da nova entrevista de Júlio Neves e Sérgio Amadeu

Vídeo da nova entrevista de Júlio Neves e Sérgio Amadeu no canal Futura

No final de outubro, o Canal Futura realizou em seu telejornal uma entrevista com Júlio Neves e Sérgio Amadeu - Júlio ao vivo no estúdio, e Sérgio Amadeu em material previamente gravado.

O Júlio recebeu o registro da entrevista em DVD na semana passada, e com a cortesia que sempre o caracteriza, me enviou (para que eu pudesse compartilhar com vocês) uma cópia via Sedex, a qual recebi na manhã de hoje. Júlio Neves é gente que faz. Obrigado, Júlio!


Não sou um expert em processamento de arquivos de vídeo, portanto não realizei maiores edições. Mas converti o DVD para o formato MPEG, dividi em 2 partes e estou disponibilizando hoje a primeira (e maior) delas, que é a entrevista ao vivo com o Júlio Neves. A segunda parte, com a introdução e a entrevista pré-gravada de Sérgio Amadeu, disponibilizarei neste sábado.

Relato do entrevistado: "Todos os depoimentos antes do meu foram gravados e o meu foi ao vivo. É interessante notar que assisti ao que havia sido gravado, juntamente com o público, pois já estava dentro do estúdio e ao lado da simpática apresentadora do "Jornal do Futura". Estou citando este fato para que entendas que não tomei o viés filosófico do Software Livre" porque já havia sido abordado anteriormente, de forma a não tornar a entrevista enfadonha ou repetitiva. Por ser uma emissora de cunho educativo, preferi tomar o caminho do treinamento em SL, abordando, entre outros, o belo trabalho do CDTC"

Augusto Campos

fisl8.0: Theo De Raadt -confirmado

fisl8.0: Theo De Raadt, criador do OpenBSD é o primeiro palestrante internacional confirmado

Theo de Radt é o primeiro palestrante internacional confirmado para o Fórum Internacional Software Livre, na sua oitava edição (fisl 8.0).

Theo é o líder do projeto OpenBSD. Em outubro de 1995, Theo fundou o OpenBSD, um projeto nascido de dentro do NetBSD 1.0. A primeira versão, o OpenBSD 1.2, saiu em julho de 1996. Em outubro do mesmo ano, veio a versão 2.0.


Desde então, o projeto tem uma nova versão a cada seis meses e cada versão é mantida durante um ano. A última versão é a 4.0 de 1o. de novembro de 2006.

Theo de Raadt (nasceu em 19 de maio de 1968, na cidade de Pretoria, África do Sul) é engenheiro de software que atualmente reside em Calgary, Alberta, Canada. É o fundador e líder dos projetos OpenBSD y OpenSSH. Antes, foi membro fundador do projeto NetBSD.

De Raadt es conocido por sus formas beligerantes y confrontativas, lo que le ha llevado a varias disputas con la comunidad de software libre, aunque su mayor y más conocida discusión fue la que tuvo con el equipo de NetBSD y que lo llevó a crear el proyecto OpenBSD. Debido a esto, se ha ganado fama de decir siempre su opinión sin importarle lo que los demás piensen, o las consecuencias de sus palabras.

En 2004, la FSF le otorgó el premio FSF Award for the Advancement of Free Software

Oposición a la guerra de Iraq

Tras oponerse a la última guerra de Iraq en una entrevista con el diario de The Globe and Mail, una subvención multimillonaria concedida por el Departamento de Defensa de Estados Unidos al Proyecto POSSE de la Universidad de Pensilvania fue cancelada, acabando con el proyecto. Fondos de esa subvención habían sido destinados a los proyectos OpenBSD y OpenSSH, además de pagar el hackaton previsto para el 8 de mayo de 2003. A pesar de que el dinero de la subvención ya había sido usado para reservar alojamiento a 60 desarrolladores de OpenBSD durante una semana, el gobierno reclamó su devolución y obligó al hotel a cancelar las reservas realizadas con el dinero reclamado. Esto derivó en críticas hacia algunos de los militares estadounidenses por su censura a la libertad de expresión. El fin de la subvención no fue tan mal golpe para OpenBSD como algunos vaticinaban. Los patrocinadores de OpenBSD se pusieron manos a la obra con rapidez para ayudar al proyecto y el hackaton se desarrolló tal y como estaba previsto.

Defensa de los drivers libres

De Raadt también es muy conocido por su labor de defensa de la liberalización de los drivers de los dispositivos hardware por parte de los fabricantes. Siempre ha sido muy crítico con los desarrolladores de Linux y otros sistemas operativos libres por su tolerancia con los drivers no libres y la aceptación de licencias restrictivas a cambio de tener drivers para sus plataformas.

En particular, de Raadt ha trabajado mucho para convencer a los fabricantes de dispositivos wireless de que permitan la libre redistribución del firmware de sus productos. Sus efuerzos han sido muy fructíferos, especialmente con las compañías taiwanesas, dando como resultado muchos drivers wireless. Actualmente, Theo anima a los usuarios de redes wireless a comprar productos taiwaneses, debido a la falta de compromiso de las corporaciones estadounidenses (como Intel) con el software libre.

Fonte: http://es.wikipedia.org/wiki/Theo_de_Raadt

***********

O sistema operacional OpenBSD é seguro, estável e robusto e vem atraindo novos a antigos usuários do Unix. O sistema é desenvolvido para ser ambos estação de trabalho e servidor. O OpenBSD suporta a maioria dos principais programas e também oferece um amplo suporte de hardware. O OpenBSD não possui políticas de negócios para lucrar como fazem o Gnu/Linux e outros BSD's, logo ele é desenvolvido e desenhado de acordo com a sua própria política, sem a influência de empresas externas. Até agora este caminho tem sido muito bom para o sistema. Ele também não foi projetado para usuários que desejam apenas "apontar e clicar" e que não gostam de ler a documentação.

O OpenBSD passou a existir em 18 de Novembro de 1995, as 8:37 quando Theo de Raadt fez o primeiro fork na árvore CVS de fontes do NetBSD. A primeira liberação, o OpenBSD 2.0, ficou disponível em outubro de 1996. Novas liberações são lançadas a cada 6 meses desde então.

Visão Geral Sobre OpenBSD

O OpenBSD é o mais seguro e bem desenvolvido sistema operacional atualmente disponível. Ele é baseado em um "sabor" do Unix que possui em suas raízes milhares de horas de pesquisa e desenvolvimento além das principais características dos sistemas operacionais modernos. Ele é considerado o sistema operacional mais seguro do mundo além de suportar partes chaves da internet global.

Uma Breve História do OpenBSD

Para entendermos as raízes do OpenBSD teremos que voltar aos anos 70 no início do desenvolvimento do Unix. O Unix foi "dividido" em BSD pela primeira vez no final dos anos 70 e depois de novo com o surgimento do FreeBSD e NetBSD no início dos anos 90. Theo De Raadt, atualmente o líder do projeto OpenBSD, dividiu o NetBSD em OpenBSD em outubro de 1995 e liberou a versão 2.0 em meados de 1996. Este novo "sabor" foi desenvolvido para ser ultra-seguro e elegante.

O OpenBSD compartilha muitas características com o FreeBSD e o NetBSD e o time de desenvolvimento tem criado muitos pacotes de software que se tornaram importantes para a comunidade como é o caso do OpenSSH e PF (Package Filter). O OpenBSD é um sistema diferente do Gnu/Linux, porém muitas aplicações que rodam em Gnu/Linux estão disponíveis para OpenBSD.

Segurança no OpenBSD

A prioridade do OpenBSD é a segurança, ele é desenvolvido e desenhado para ser seguro em todos os estágios de programação. O OpenBSD é imune a maioria dos exploits e ataques que afetam sistemas GNU/Linux e outros BSD's (o MS Windows nem entra no pário, simplesmente porque ele não é imune a nada :) ). O código do kernel e dos pacotes são frequentemente auditados na tentativa de encontrar erros de programação e falhas de segurança. Outra característica importante do OpenBSD é que ele mantem viva a filosofia do modelo original de desenvolvimento do BSD, previnindo o máximo possível uma aplicação de "quebrar".

Fonte: http://salvatti.expert.com.br/openbsd/

terça-feira, dezembro 12, 2006

Transforme seu Celular num MP3 Player

Vou mostrar aqui como, utilizando ferramentas livres e gratúitas, transformar seu celular num tocador de música digital. O celular onde eu fiz meus testes foi o Nokia 6600 (buscapé: este celular mais barato aqui).
Ao final deste tutorial você estará apto a transformar celulares (não qualquer celular) em um aparelho de ouvir música completo bem como reduzir pela metade o tamanho de suas músicas para econômizar espaço na memória do celular.

É necessário ter um celular com funções sistema operacional Symbian. Verifique no manual do seu aparelho se ele possui esta funcionalidade. Veja aqui uma lista de aparelhos que possuem Symbian. Com um celular que possui Symbian podemos instalar aplicativos que vão rodar nativamente, diferentemente dos aplicativos Java que vão rodar sob uma máquina virtual e não terão acesso total as funcionalidades do aparelho.

Verificando se o seu aparelho é suportado pelo Symbian OggPlay:

O Symbian OggPlay é um software livre para tocar arquivos de aúdio em diversos formatos. Ele suporta nativamente o formato Ogg e consegue detectar os codecs de decodificação de outros formatos disponíveis no seu celular.

O Ogg é semelhante ao conhecido formato MP3, só que utilizável também para outros de fluxo de dados (vídeo por exemplo), no caso aqui, usaremos Ogg para aúdio. Os arquivos Ogg são idêntificados pela extensão .ogg.

Atualmente o Symbian OggPlay está disponível para os seguintes celulares: Sendo X, Siemens SX-1, Nokia NGage, Nokia NGageQD, Nokia 7650, Nokia 3650, Nokia 3230, Nokia 6260, Nokia 6600, Nokia 6620, Nokia 6630, Nokia 6670, Nokia 6680, Nokia 7610, Panasonic X700, Nokia N70, Nokia N90, Nokia 9300, Nokia 9500, Nokia 7710, SonyEricsson P800, P900, Motorola A920, Nokia 3250, Nokia N71, Nokia N80, Nokia N91, Nokia N92, Nokia E60, Nokia E61, Nokia E70. A maioria destes celulares está disponível no Brasil mas em geral custam mais caro que os modelos mais comuns, mas agora eles já estão ficando mais acessíveis.

Instalação do Symbian OggPlay:
A instalação do programa pode varia de aparelho para aparelho. No Nokia 6600 é bem simples. Primeiro você vai no site do Symbian OggPlay e baixa o instalar para essa série de Celular, no caso é o Series 60 MMF. O arquivo é pequeno, cerca de 300kb, extensão .sis que é a de aplicativos Symbian. Depois é só passar para o celular (veja abaixo como passar uma música para o celular, o processo é o mesmo).
Passando as músicas para o celular:Com o Nokia 6600 é necessário ter um dongle bluetooth (um chaveirinho parecido com um pendrive). Custo em torno de R$ 50,00 e não é difícil de achar (buscapé: menor preço de adaptadores bluetooth você encontra fácil aqui).

No Linux depois de instalado o kbluetoothd e as outras bibliotecas necessárias é so clicar com o botão esquerdo sobre o arquivo e procurar a opção de envio via bluetooth:



Há um tutorial do Morimoto que ensina como instalr esses programas, veja aqui.
No Windows é necessário instalar os drivers do adaptador, quem geralmente vem junto com o aparelho, em um CD.

Funcionalidades:O Symbian OggPlay tem várias vantagens em relação aos outros players (inclusive os proprietários) mas estas funcionalidades vão variar de aparelho para aparelho.
Ele permite tocar músicas mesmo quando entra a proteção de tela. Permite que você coloque uma música como toque ou como alarme, o que uma das funcionalidades mais procuraradas. Análise de frequência. Leitura de ID3 Tags. Skins. Atalhos. Leitura de listas .m3u do Winamp.

Mas e as MP3s?
O Symbian OggPlay deteca os codecs já existentes e os formatos já suportados pelo seu aparelho. Com isso ele é capaz de tocar arquivos MP3, AAC, MP4 e M4A. No caso do Nokia 6600 que não tem um codec “de fábrica” para ler MP3, é necessário instalar um codec.

Também é possível passar as músicas de MP3 para OGG. No Linux eu faço isso com o Audacity, no Windows você pode usar o Audacity também ou este.

Conclusões
No caso do Nokia 6600, a qualidade do som não é muito boa porque sua saída de som é mono e meio ruim. A vantagem é que você pode pegar uma música de 2MB e reduzir seu tamanho para 1MB (ou menos) reduzindo a amostragem e as faixas de estéreo (num próximo post eu vou mostrar como fazer isso no Audacity).
Pronto agora já posso colocar os headphones e curtir umas músicas legais.
Buscapé: Não gostou? Não tem problema. Compre um MP3 Player baratinho aqui.

quinta-feira, dezembro 07, 2006

Configurando o Postifix


Esta é a parte final deste How-To, é a configuração final do postfix, será basicamente, ligando o Postfix ao Cyrus-Sasl e a base de dados, basicamente, abaixo serão mostrados os arquivos do diretório /usr/local/etc/postfix, todos eles devem estar presente, as únicas alterações a serem feitas é o nome do usuário e senha da base de dados nos arquivos de ligação com o MySQL.


Arquivo de configuração do Postfix. /usr/local/etc/postfix/main.cf

mydestination = localhost.$mydomain, localhost, $transport_maps
local_recipient_maps = unix:passwd.byname, $alias_maps, $virtual_recipient_maps
unknown_local_recipient_reject_code = 550
mynetworks_style = class
alias_maps = hash:/usr/local/etc/postfix/aliases
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/local/sbin/sendmail
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
setgid_group = maildrop
html_directory = no
manpage_directory = /usr/local/man
sample_directory = /usr/local/etc/postfix
readme_directory = no

#Configuração do MySQL e de dominios virtuais
transport_maps = mysql:/usr/local/etc/postfix/transport.cf
virtual_gid_maps = mysql:/usr/local/etc/postfix/gids.cf
virtual_mailbox_base = /var/mail/virtual
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql_virtual.cf
virtual_maps = mysql:/usr/local/etc/postfix/mysql.aliases.cf
virtual_uid_maps = mysql:/usr/local/etc/postfix/uids.cf
virtual_recipient_maps = mysql:/usr/local/etc/postfix/recipients.cf
virtual_mailbox_limit_inbox = no
virtual_mailbox_limit_maps = mysql:/usr/local/etc/postfix/mailboxsize-mysql.cf
virtual_mailbox_limit_override = yes
virtual_maildir_extended = yes
virtual_create_maildirsize = yes
virtual_mailbox_limit = 100000000

smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_helo_required = yes
smtpd_sender_login_maps = hash:/usr/local/etc/postfix/sender_login_maps
smtpd_sender_login_maps = mysql:/usr/local/etc/postfix/login_maps.cf
smtpd_recipient_restrictions =
reject_non_fqdn_sender
reject_non_fqdn_recipient
reject_invalid_hostname
reject_unknown_sender_domain
reject_unknown_recipient_domain
reject_multi_recipient_bounce
reject_sender_login_mismatch
permit_sasl_authenticated
reject_unauth_destination
permit

Arquivos de ligação do postfix com o MySQL:

/usr/local/etc/postfix/transport.cf

user = postfix
password = e-mail
dbname = mail
table = transport
select_field = transport
where_field = domain
hosts = localhost

/usr/local/etc/postfix/gids.cf

user = postfix
password= e-mail
dbname = mail
table = virtual_users
select_field = gid
where_field = id
hosts = localhost

/usr/local/etc/postfix/uids.cf

user = postfix
password= e-mail
dbname = mail
table = virtual_users
select_field = uid
where_field = id
hosts = localhost

/usr/local/etc/postfix/mysql_virtual.cf

user = postfix
password= e-mail
dbname = mail
table = virtual_users
select_field = maildir
where_field = id
hosts = localhost

/usr/local/etc/postfix/mysql.aliases.cf

user = postfix
password= e-mail
dbname = mail
table = aliases
select_field = rcpt
where_field = alias
hosts = localhost

/usr/local/etc/postfix/recipients.cf

user = postfix
password= e-mail
dbname = mail
table = virtual_users
select_field = nome
where_field = id
hosts = localhost

/usr/local/etc/postfix/mailboxsize-mysql.cf

password = e-mail
dbname = mail
table = virtual_users
select_field = quota
where_field = id
hosts = localhost

/usr/local/etc/postfix/login_maps.cf

password = e-mail
dbname = mail
table = virtual_users
select_field = login_maps
where_field = id
hosts = localhost

pronto, tudo deve estar funcionando.

Agora vamos instalar o WebMail

Postfix


O postfix será nosso servidor de e-mail, ele escutará o protocolo SMTP pela porta 25/tcp e será responsável pelo transporte das mensagens. O Postfix é o carro-chefe de nosso Sistema, então fica difícil apresentar sua instalação em uma única parte do artigo, então primeiramente irei construí-lo a partir do ports, e na parte final iremos configurá-lo, pois sua configuração depende de vários outros serviços.

Instalando o Postfix

O Postfix irá precisar de alguma dependências, porém tudo isto é feito automaticamente a partir do ports. Uma única observação, se a autenticação for feita através das senhas de usuários do UNIX, é necessário instalar cyrus-sasl2-saslauthd. Neste caso não estaremos utilizando, então isto não se faz necessário.

O ports do postfix fica em /usr/ports/mail/postfix. Para construir o Postfix apenas digite make no diretório do ports, neste momento aparecerá uma tela com as opções de configuração. Eu escolhi as opções:

NOPCRE Pois eu não irei utilizar expressões regulares do perl.
Sasl2 Para autenticação SMTP
DB43 Para criar tabelas de aliases e outras configurações com base de dados DB.
MySQL Para habilitar o suporte ao MySQL.

A partir daí o postfix começa a ser construído, e dependendo da máquina isto pode demorar algum tempo. Nos instantes finas da instalação, você será perguntado se deseja ativar o postfix no mailer.conf, diga que sim, e ele será automaticamente inicializado pelo sistema.

Configurando o Sistema Operacional

O postfix não irá precisar de uma entrada no arquivo de inicialização /etc/rc.conf pois eu habilitei-o no mailer.conf, porém se você não o habilitou você precisa inserir as seguintes linhas no /etc/rc.conf

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
postfix_enable="YES"

Estas linhas servirão para desativar o Sendmail e ativar o Postfix.

O Postfix utilizará a porta 25 tanto para chegada quanto para saída de mensagem, caso você esteja utilizando um firewall, não esqueça de deixar o trafego in e out passar por esta porta. O postfix também depende do serviço de nomes, verifique se o tempo de consulta a base de dados de nomes não é muito lento, isto pode trancar seu sistema, não esqueça de liberar o tráfego 53 udp e tcp. Cuidado com o horário e o fuso-horário do sistema também é fundamental.

Courier-Imap

O Courier-Imap nos dará suporte aos protocolos de entrega de mensagem, o imap e pop3, apesar do nome, ele traz estes dois protocolos. O courier-imap é dividido em duas partes, os protocolos de transporte e de autenticação. O os protocolos de transporte serão feitos pelos daemons imapd e pop3d, e o protocolo de autenticação será feito pelo authdaemond.

Instalado o Courier-Imap

A instalação do courier-imap será feita via ports, o caminho do ports é: /usr/ports/mail/courier-imap, entre neste diretório e execute o comando make install. Após isto irá aparecer uma tela oferecendo opções de compilação, neste caso adicione somente a opção AUTH_MYSQL, que nos dará suporte ao MySQL. Após isto a instalação deverá terminar sem demais perguntas.

Configuração do Courier-Imap

Vamos dividir a configuração do courier-imap em duas partes, primeiro iremos abordar o daemon de autenticação, e logo após os daemons de entrega.

Configurando o authdaemond

O authdaemond irá por buscar informações do banco de dados sobre os usuários. Os arquivos de configuração do authdaemond estão em /usr/local/etc/authlib, e são eles, authdaemonrc responsável por características gerais do sistema e authmysqlrc responsável pela ligação entre o courier-imap e o banco de dados. Abaixo veremos os arquivos de configuração de exemplo.

authdaemonrc
authmodulelist="authmysql"   # Lista de módulos habilitados.
authmodulelistorig="authmysql" # Lista de módulos utilizados pelo Courier webadmin.
daemons=5 # Número de daemons de autenticação.
authdaemonvar=/var/run/authdaemond # Diretório utilizado por alguns scripts.. NÃO MEXA.
subsystem=mail # Para qual facilidade do syslog enviar as mesagens.
DEBUG_LOGIN=0 # Nível de debug que as mensagens são enviadas para a syslog.
DEFAULTOPTIONS="wbnodsn=1" # Opções de linha de comando.
LOGGEROPTS="" # Opções de log.
authmysqlrc
MYSQL_SERVER localhost   # Servidor do banco de dados
MYSQL_USERNAME portfix # Usuário do banco de dados
MYSQL_PASSWORD e-mail # Senha do banco de dados
MYSQL_SOCKET /tmp/mysql.sock # Socket do banco de dados
MYSQL_PORT 3306 # Porta do banco de dados
MYSQL_OPT 0 # Opções do mysql
MYSQL_DATABASE mail # Nome do banco de dados
MYSQL_USER_TABLE virtual_users # Nome da tabela com informações do usuário
MYSQL_CLEAR_PWFIELD password # Coluna com as senhas
MYSQL_UID_FIELD uid # Coluna com o userid
MYSQL_GID_FIELD gid # Coluna com o groupid
MYSQL_LOGIN_FIELD id # Coluna com o Login
MYSQL_HOME_FIELD home # Coluna com o Home
MYSQL_NAME_FIELD nome # Coluna com o nome do usuário
MYSQL_MAILDIR_FIELD maildir # Coluna com o maildir do usuário
MYSQL_QUOTA_FIELD quota # coluna com a cota do usuário
MYSQL_WHERE_CLAUSE imapok=1 # Coluna com a flag de ativação da conta

A configuração do authdaemond está pronta, agora veremos as configurações dos damons de transporte.

Configurando os daemons de transporte

Os arquivos de configuração do courier-imap estão em /usr/local/etc/courier-imap, e tem os nomes correspondentes ao seu daemon de transporte. Você pode optar por utilizar somente um dos dois protocolos, porém o imap tem algumas vantagens sobre o pop3, cabe a você escolher qual prefere, neste exemplo utilizaremos os dois. Abaixo veremos os arquivos de configuração de exemplo.

imapd
ADDRESS=0
PORT=143
MAXDAEMONS=40
MAXPERIP=4
PIDFILE=/var/run/imapd.pid
TCPDOPTS="-nodnslookup -noidentlookup"
LOGGEROPTS="-name=imapd"
IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE"
IMAP_KEYWORDS=1
IMAP_CAPABILITY_ORIG="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 AUTH=CRAM-SHA256 IDLE"
IMAP_PROXY=0
IMAP_PROXY_FOREIGN=0
IMAP_IDLE_TIMEOUT=60
IMAP_CAPABILITY_TLS="$IMAP_CAPABILITY AUTH=PLAIN"
IMAP_CAPABILITY_TLS_ORIG="$IMAP_CAPABILITY_ORIG AUTH=PLAIN"
IMAP_DISABLETHREADSORT=0
IMAP_CHECK_ALL_FOLDERS=0
IMAP_OBSOLETE_CLIENT=0
IMAP_UMASK=022
IMAP_ULIMITD=65536
IMAP_USELOCKS=1
IMAP_SHAREDINDEXFILE=/usr/local/etc/courier-imap/shared/index
IMAP_ENHANCEDIDLE=0
IMAP_TRASHFOLDERNAME=Trash
IMAP_EMPTYTRASH=Trash:7
IMAP_MOVE_EXPUNGE_TO_TRASH=0
SENDMAIL=/usr/sbin/sendmail
HEADERFROM=X-IMAP-Sender
IMAPDSTART=NO
MAILDIRPATH=Maildir
pop3d
PIDFILE=/var/run/pop3d.pid
MAXDAEMONS=40
MAXPERIP=4
POP3AUTH="LOGIN CRAM-MD5 CRAM-SHA1"
AUTHMODULES="authdaemon"
POP3AUTH_ORIG="PLAIN LOGIN CRAM-MD5 CRAM-SHA1 CRAM-SHA256"
POP3AUTH_TLS=""
DEBUG_LOGIN=2
PORT=110
ADDRESS=0
TCPDOPTS="-nodnslookup -noidentlookup"
LOGGEROPTS="-name=pop3d"
POP3DSTART=NO
MAILDIRPATH=Maildir

As configurações padrões são bastante completas, os itens que vale a pena dar uma revisada são:

MAXDAEMONS=40   # Número máximo de processos
MAXPERIP=4 # Conexões máximas simultâneas por IP

Configuração do SO

Agora que tudo está configurado, basta ativar o courier-imap na inicialização do sistema. para isto basta adicionar as seguintes linhas em /etc/rc.conf.

courier_authdaemond_enable="YES" # Obrigatória
courier_imap_pop3d_enable="YES" # Para ativar o pop3
courier_imap_imapd_enable="YES" # Para ativar o imapd

O protocolo imap utiliza a porta 143 TCP, e o protocolo pop3 utiliza a porta 110 TCP, se você está utilizando um firewall, libere estas portas. Os logs serão enviados para a facilidade mail do syslog, por padrão o arquivo de log será /var/log/maillog.

Courier-Maildrop

O Maidrop será nosso agente de entrega de mensagem, ele irá entregar as mensagens em suas devidas caixas de correio. Bom, mas porque não utilizar o daemon virtual que vem juntamente com o Postfix? Primeiramente, o virtual não tem controle de quota nativo, para isso iria ser preciso aplicar um patch, Segundo, o maildrop pode fazer várias verificações de mensagem, e ele cria automaticamente as caixas de correio, já com o virtual você teria de criá-las manualmente, e o maildrop oferece opções de filtros, como por exemplo desviar as mensagens de spam para uma pasta chamada Spam, retirando assim os spams da caixa de entrada.

Instalando o Maiodrop

O maildrop será instalado a partir do ports no seguinte caminho, /usr/ports/mail/maildrop. Como as informações de usuário estão armazenadas no banco de dados, precisamos adicionar o suporte para a Authlib, para isto execute o seguinte comando para construir o ports.

# make -DWITH_AUTHLIB install

A partir deste memento a instalação deve concluir sem mais perguntas.

Após a instalação, devemos criar um usuário para executar o maildrop. neste caso criei o usuário vmail, e o com o grupo padrão mail. O UID e o GID do usuário devem ser os mesmo do uid e gid do banco de dados. Isto determinará o dono dos diretórios e arquivos das caixas de correio, então no memento da criação de uma nova conta, não esqueca de inserir os valores uid e gid iguais as do usuário vmail e do grupo mail. O maildrop será executado com o usuário vmail, porém ele não possuirá permição para comunicar-se com a base de dados, por isto o executavel do maildrop deve ter o SetUID habilitado, para isto execute o seguinte comando:

# chmod u+s /usr/local/bin/maildrop

A configuração básica do maildrop está pronta.

Configurando o Maildrop

O maildrop tem apenas um arquivo de configuração, que está em: /usr/local/etc/maildroprc, na verdade este arquivo nem precisa existir. A configuração do banco de dados não é necessária, pois ele irá utilizar a Authlib para isto, e isto nós já configuramos anteriormente para o courier-imap.

O arquivo de configuração do maildrop irá conter uma rotina de tarefas que ele deve fazer ao entregar uma mensagem, veja o exemplo que utilizamos abaixo.

logfile "/var/log/maildrop.log"   #Arquivo de Log

`test -d $HOME/$DEFAULT` # Testa se a caixa de correio existe
if ($RETURNCODE!=0) # Caso não exista...
{
`maildirmake $DEFAULT` # Cria a caixa de correio,
`maildirmake -f .Spam $HOME/$DEFAULT` # e as pastas para o Spam
`maildirmake -f .Trash $HOME/$DEFAULT` # e a lixeira
}

QUOTA="$MAILDIRQUOTA"'S'
`maildirmake -q $QUOTA $HOME/$DEFAULT` # Ajusta a cota da caixa de correio

if (/^X-Spam-Status: Yes/) # E se a mensagem for um Spam, ela a envia
{ # para a pasta Spam.
to "$DEFAULT/.Spam/"
}

Ligando ao Postfix

Para ligá-lo ao Postfix, apenas verifique a linha sobre o transporte maildrop no arquivo /usr/local/etc/postfix/master.cf ela deve estar como no exemplo abaixo.

maildrop  unix  -       n       n       -       -       pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient} -w 90

Com a opção -w 90 o maildrop irá enviar a mensagem contida no arquivo /usr/local/etc/quotawarnmsg avisando que a cota de uso de sua conta chegou aos 90%, o valor pode ser alterado a seu critério, e por padrão a mensagem não existe, então você deve cria-la.

SpamAssassin




O SpamAssassim será responsável pelo controle anti-spam, pesquisas mostram que sua eficácia é de 95 por cento, porém, seu custo é um pouco alto, ele checa todo o corpo de uma mensagem, isto cria um esforço computacional grande, e ele também consome uma boa fatia da memória. Nós utilizaremos o SpamAssassin na forma de um daemon, o spamd, isto reduz o esforço que o computador faria para iniciar a execução a cada checagem de e-mail, assim, o spamassassim quando requisitado não precisa iniciar todo o processo, apenas verificar a mensagem. Para isto é nescessário um programa cliente, o spamc, que envia a mensagem para o spamd chegar.

Instalando o Spamassassim

O SpamAssassin será instalado via ports, o caminho para o seu ports é: /usr/ports/mail/p5-Mail-SpamAssassin/. Para instalar entre no diretório do ports e execute.

# make install

Após isto irá aparecer uma tela de configuração de opções, eu não habilitei nenhuma, agora é só esperar o sistema terminar de compilar o SpamAssassin.

Configurando o SpamAssassim

A configuração do SpamAssassim é simples, o arquivo de configuração está em /usr/local/etc/mail/spamassassim. O arquivo init.pre contém informações sobre módulos de checagem de e-mail, habilite ou desabilite-os como quiser. O arquivo de configuração que mais nos interessa neste memento é o local.cf. Ele é um arquivo simples, em nosso coso ele precisa ter apenas as seguintes linhas:

# Deixa a mensagem intacta, porém adiciona os headers de spam.
report_safe 0
# Este é a pontuação pela qual uma mensagem é considerada spam
required_score 5.0

Configuração do Sistema Operacional

É preciso escrever um script de inicialização do spamd, ele deve estar em /usr/local/etc/rc.d/spamd.sh e ter permissão de execução. O arquivo de inicialização deve ser como no exemplo abaixo, apenas ajuste as opções de processos filhos do spamd conforme for o trafego de seu servidor.

/usr/local/etc/rc.d/spamd.sh

#!/bin/sh

case "$1" in
start)
/usr/local/bin/spamd --socketpath=/var/run/spamd/spamd.sock --pidfile=/var/run/spamd/spamd.pid --min-children=1 --min-spare=1 --max-spare=2 -d
echo "Starting Spamd."
;;
stop)
kill -9 `cat /var/run/spamd/spamd.pid`
echo "Stoping Spamd."
;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
exit 64
;;
esac
exit 0

O SpamAssassin está pronto, agora vamos ligar os dois filtros como o Clamav-Filter.

Configurando do Clamav-Filter

Faça o download do clamav-filter apartir deste link. Após o download copie-o para o diretório /usr/local/libexec/postfix/, e altere suas permições como no exemplo abaixo:

chown clamav:clamav /usr/local/libexec/postfix/clamav-filter.sh

O clamav-fiter irá precisar de dois diretórios, com permissão de escrita para o dono do clamav-filter, neste caso o usuário clamav. para isto execute o seguinte comando.

# mkdir /var/run/clamav /var/log/clamav
# chown clamav:clamav /var/run/clamav /var/log/clamav

Ligando o clamav-filter ao Postfix

Para ligá-lo ao Postfix precisamos criar um transporte e um filtro para as conexões tcp, para isto comente a seguinte linha no arquivo /usr/local/etc/postfix/master.cf

smtp      inet  n       -       n       -       -       smtpd
E adiciones estas linhas ao mesmo aquivo.
smtp      inet  n       -       n       -       -       smtpd
-o content_filter=clamav:clamav
clamav unix - n n - - pipe
flags=Rq user=clamav argv=/usr/local/libexec/postfix/clamav-filter.sh -f ${sender} -- ${recipient}

O clamav-Filter está pronto!