Arquivo da categoria: Informática

Bom o portal amcollucci.com.br, havia nascido com o intuito de falar coisas sobre informática, hoje ele e muito mais abrangente mas não tem como eu abandonar a minha origem!

Palestra sobre Lógica da Programação no Colégio Magnum

Dia 15 de dezembro estive junto com o Professor Paulo Roberto, palestrando no Colégio Magnum Sobre lógica da programação para alunos do ensino Médio.

Inicialmente o Prof Paulo, discursou sobre a lógica matemática, desde a sua Origem com o filósofo Aristoteles até a demonstração dos Teoremas de De Morgan. O mais interessante foi o jogo que ele desenvolveu que utiliza a lógica matemática em cartas. Infelizmente o tempo não foi suficiente para jogarmos uma partida.

Gostei também da historia que ele contou sobre o ~(p^q) ou ” não p e q ” segue a história que ele contou para explicar:

Uma garota vai fazer 15 anos e seus pais pedem pra ela listar os amigos que ela quer ver na festa.

Dai então ela entrega a lista para seus Pais que vão olhando nome por nome.

Seu pai para em um nome e diz , conheço o “P” e toda vez que vi ele em uma festa ele brigou.

Prosseguindo com a leitura seu Pai encontra “Q” e diz que “Q” bebe muito e apronta nas festas tambem.

So que sua mãe ao ver esses nomes diz, olha já fui em festas onde estava P , e em festas onde estava Q e eles não brigaram, o problema e quando os dois estão juntos (p^q)

Então seus pais viram para a menina, e dizem ~(p^q) ou no português ” não p e q”.

A menina muito triste liga pra sua colega e diz: _Papai não quer nem p nem q na minha festa.

Ai vem a pergunta a menina entendeu o que os pais lhe disseram?

Bom de minha parte eu levei o Arduino, para os garotos conhecerem, demonstrei o uso das portas lógicas em circuitos elétricos e fiz alguns codigos no arduino para testar a o funcionamento dos operadores lógicos e provar na prática a teoria de lógica.

Falei tambem sobre diferentes utilizações da lógica matemática, por exemplo em sensores eletrônicos, e ainda da utilização da matemática em áreas de Engenharia e Informática.

Fica aqui tambem registrado a ótima impressão que tive dos alunos do Colégio, todos eles muito educados, e atenciosos, e claro com vontade de aprender, a galerinha fica depois do horário normal de aula em determinados dias da semana para estudar lógica e matemática.

 

Arquivos CSV

Já faz um tempinho que não escrevo, mas estou correndo contra o tempo ultimamente, mudando de residência, com um novo emprego, e com muitos projetos. Graças a um desses projetos precisei de uma alternativa à um SGBD normal, daí logo me veio a idéia de usar os arquivos do tipo CSV.

CSV em português significa algo como campos separados por vírgula. Mas não significa que os campos tenham que ser separados somente por vírgulas, o uso de ponto vírgula também e aceito. O CSV e normalizado pela RFC 4180 todas as planilhas eletrônicas que eu conheço suportam nativamente esse tipo de arquivo, e implementar um leitor em php pra ele não e muito complicado não.

O código que vou apresentar abaixo e uma implementação para criar um arquivo csv, e alimenta-lo:

class_csv.php
class csv {
/* declaraçao de variaveis utilizadas*/
private $linha;
private $arquivo;
private $arquivo_aberto;
private $parametro;
/*funcoes set*/
/*
“i” significa que a váriavel deve vir de uma função interna
“e” significa que a váriavel deve vir de uma função externa

*/
/*Aqui esta o conteudo a ser gravado*/

public function set_linha($e_linha){

$this->linha = $e_linha;

}

/*Aqui fica o arquivo a ser utilizado*/

public function set_arquivo($e_arquivo){

$this->arquivo = $e_arquivo;

}

/*Funcao para escrever no fim do arquivo*/

public function escreve_no_fim(){

$this->set_parametro(“a”);
$this->abre_arquivo();
fwrite($this->arquivo_aberto,$this->linha.”\n”);

}

/*parametro do fopen*/
/*
“a” para adicionar
“w” para sobreescrever/criar
*/
private function set_parametro($i_parametro){

$this->parametro = $i_parametro;

}

private function abre_arquivo(){

$this->arquivo_aberto=fopen($this->arquivo.”.csv”,$this->parametro);

}

}

teste.php

require(“csv.php”);
/* Grava as inscrições */

$banco=new csv();
$banco->set_arquivo(“submissao”);
$banco->set_linha(“campo1″,”campo2″,”campo3”);
$banco->escreve_no_fim();

Até a próxima!

Certificação Linux LPIC-1

Bom trabalho há alguns anos com linux, e como trabalho para mim mesmo, (melhor coisa que ja fiz na vida), sempre adiei o dia de tirar minha certificação. Porém com várias reviravoltas que a vida dá achei que chegou o momento de tirar a Certificação LPIC-1.

Com algumas pesquisas na internet vi que já há material suficiente para conseguir estudar sem ter de pagar um curso para isso. A LPIC-1 e subdividida em duas provas, a LPI 101, e a LPI 102, cada uma custa US$160,00 um dinheiro rázoavel, e como não sou rico, não posso dar ao luxo de falhar. Pretendo tirar a LPI101, nos proximos 30 dias e a LPI 102, de 40 a 45 dias depois da LPI101.

Os tópicos detalhados do que é cobrado no exame é encontrado aqui. O primeiro exame, não me pareceu muito díficil. Já o LPIC-2 e 3 tem o problema de estar em inglês. Vou documentar nesse blog tudo que achar sobre essa certificação de maneira que quem desejar possa tira-la gratuitamente(exceto pela taxa a ser paga ao Instituro LPI).

Essa certificação tem de ser revalidada de 5 em 5 anos, ou seja você tem de manter seu conhecimentos ou amplia-los, você pode por exemplo passar na LPIC2, isso renova automaticamente a LPIC1 por mais 5 anos.

Melhor material que encontrei sobre essa certificação até o momento.

http://www.lpibrasil.com.br/auto-estudo-lpi

Att,
Anthony Collucci

Servidor Debian – Parte 5 e final!

Bom, no inicio dessa série de posts me prôpus a criar um servidor simples que tivesse todos os serviços básicos em um só equipamento , com duas placas de redes e uma delas ligada ao roteador/modem, e a outra à rede interna.

Fiz isso de uma maneira bem simples não usei configurações muito avançadas nem nada que fosse realmente inovador. Porque o objetivo e para ser usado como plataforma de apoio à montagem de confs mais elaboradas no futuro.

Se comparem esse tutorial aos servidores que produzo normalmente, parecerá uma coisa boba, pois não há nem mesmo algum script que automatize alguma tarefa. Agora vou finalizar ensinando como configurar o SAMBA, que será nosso PDC, e servidor de arquivos.

PDC é o Primay Domain Controler responsavel pela autenticação da rede. No caso do dominio. Eu utilizo o Roaming Profile nessa configuração ou seja, em qualquer maquina que o usuario logar ele irá baixar do servidor a sua área de trabalho, seus arquivos do perfil etc…

Uma sacada importante para isso funcionar e a pasta “sysvol”, que é obrigatoria, passei meses testando configurações lá pras idas de 2008, pra descobrir isso. Por falar nisso essa conf e dessa época também, e roda tão redondo nos meu servidores, que nunca quis alterá-la.

Bom vamos parar de papo e ir para a instalação.

#apt-get install samba

Depois vamos trabalhar no arquivo de configuração.

#vim /etc/samba/smb.conf

[global]

### Nome do Dominio ###
netbios name = srvamcollucci
workgroup = amcollucci.local
### Seguranca ###
security = user
smb passwd file = /etc/samba/smbpasswd
encrypt passwords = true
guest account = nobody
admin users = admin
domain logons = yes
hosts allow = 192.168.25.0/24
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*

### Define a interfacae que vai atender as solicitacoes ###

bind interfaces only = yes
interfaces = eth0

### Pasta do Roaming Profile ###

logon path = \\srvamcollucci\sysvol\%U

### Configuracoes para fazer o Samba responder como PDC ###

os level = 80
domain master = yes
preferred master =yes
local master = yes
domain master = yes
wins support = yes

### Compartilhamentos ###

### Deixei um exemplo comentado:

# compartilhamentos

#        [SAMPLE]
#        path = /home/fileserver/
#        comment = Acesso restrito
#        writeable = yes
#        browseable = yes
#        valid users =
#        write list =
#        read list =
#        force directory mode = 0777
#        force create mode = 0777

#Pasta de logon dos usuarios
[sysvol]
comment = System Volume
path = /home/fileserver/sysvol
public = yes
guest ok = no
valid users =
write list =
writeable = yes
browseable = no
share modes = no

Agora vem a parte da montagem da estrutura de pastas:

#mkdir /home/fileserver

#mkdir /home/fileserver/sysvol

#chmod 777 /home/fileserver

#chmod 777 /home/fileserver/sysvol

Como voce pode querer criar muitas pastas, o melhor e criar um script que automatize isso, pois sempre que criar uma pasta deve dar permissões para que o samba possa abri-la, outra coisa e que precisaremos desse script logo depois para criarmos o script de criação de usuários.

#vim /etc/samba/criadiretorios.sh

#!/bin/sh
mkdir /home/fileserver/$1
chmod 777 /home/fileserver/$1

Vamos agora criar um script para criação de usuarios:

#vim /etc/samba/criausuarios.sh

#!/bin/sh

useradd $1 –shell /bin/false

smbpasswd -a $1
smbpasswd -e $1

echo “usuario $1 criado com sucesso!”

mkdir /home/fileserver/sysvol/$1
cd /home/fileserver/sysvol
chmod 777 $1 $1
chown $1 $1
cd –

No fim damos permissão de execução para esses scripts:

# chmod 755 criausuarios.sh

# chmod 755 criadiretorios.sh

#chmod +X criausuarios.sh

# chmod +X criadiretorios.sh

Vamos transformar eses scritps em comandos agora:

#cd /usr/bin

#ln -s /etc/samba/criadiretorios.sh criadiretorios

#ln -s /etc/samba/criausuarios.sh criausuarios

Agora em qualquer pasta que você utilizar os comandos criadiretorios ou criausuarios ele executará o script que configuramos.

Ainda precisamos criar o usuario admin que configuramos como o Administrador da nossa rede.

#criausuarios admin

Pronto! nosso servidor esta montado. Os scripts que criamos facilitam e muito a vida na hora de criar os usuários e diretorios. No fim das contas deposi de tudo montando a unicas coisas que são necessárias no dia a dia, são a adição de máquinas ao domínio, a adição de pastas compartilhadas, e a adição de usuarios as três operações também são bem simples.

Adição de usuários:

#criausuarios user

Adição de máquinas: (isso aqui pode virar um script, mas vou deixar para você)

useradd -s /bin/false -d /dev/null nome_seguido_de_$
smbpasswd -m -a nome_sem_$

ex:

#useradd -s /bin/false -d /dev/null maquina1$

smbpasswd -m -a  maquina1

Para compartilhar uma pasta basta acrescentar no smb.conf, as linhas que deixei comentada no script e que replico aqui:

[Nome do compartilhamento]
path = caminho do compatilhamento
comment = Acesso restrito
writeable = se há  podemos escrever ou não
browseable = se podemos navegar na pasta
valid users = Usuários aptos a interagirem com a pasta
write list = Usuários com permissão de escrita na pasta
read list = Usuários com permissão de leitura na pasta
force directory mode = 0777
force create mode = 0777

ex:

Primeiro criamos o diretorio:

criadiretorio estamosnofim

Depois configuramos ele no smb.conf:

[FIM]
path = /home/fileserver/estamosnofim
comment = Acesso restrito
writeable = yes
browseable =  yes
valid users = user1,user2
write list = user1
read list = user2
force directory mode = 0777
force create mode = 0777

Agora so adicione as seguinte linhas ao seu firewall, para conseguir acessar os compartilhamentos:

echo “liberando o SAMBA”

iptables -A INPUT -p tcp -s 192.168.0.0/24 –dport 139 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.0.0/24 –dport 139 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.0.0/24 –dport 138 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.0.0/24 –dport 138 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.0.0/24 –dport 137 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.0.0/24 –dport 137 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.0.0/24 –dport 445 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.0.0/24 –dport 445 -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 –dport 139 -j DROP
iptables -A INPUT -p udp -s 0/0 –dport 139 -j DROP
iptables -A INPUT -p tcp -s 0/0 –dport 138 -j DROP
iptables -A INPUT -p udp -s 0/0 –dport 138 -j DROP
iptables -A INPUT -p tcp -s 0/0 –dport 137 -j DROP
iptables -A INPUT -p udp -s 0/0 –dport 137 -j DROP
iptables -A INPUT -p tcp -s 0/0 –dport 445 -j DROP
iptables -A INPUT -p udp -s 0/0 –dport 445 -j DROP
iptables -A OUTPUT -p tcp -s 192.168.0.0/24 –dport 139 -j ACCEPT
iptables -A OUTPUT -p udp -s 192.168.0.0/24 –dport 139 -j ACCEPT
iptables -A OUTPUT -p udp -s 192.168.0.0/24 –dport 138 -j ACCEPT
iptables -A OUTPUT -p udp -s 192.168.0.0/24 –dport 138 -j ACCEPT
iptables -A OUTPUT -p udp -s 192.168.0.0/24 –dport 137 -j ACCEPT
iptables -A OUTPUT -p udp -s 192.168.0.0/24 –dport 137 -j ACCEPT
iptables -A OUTPUT -p udp -s 192.168.0.0/24 –dport 445 -j ACCEPT
iptables -A OUTPUT -p udp -s 192.168.0.0/24 –dport 445 -j ACCEPT

Depois e so iniciar o SAMBA e correr para o abraço!

/etc/init.d/samba restart

Bom esse e o fim! Até a proxima!

att,

Anthony Collucci

Servidor Debian – Parte 4

Bom agora vamos trabalhar no bloqueio as paginas Webs, coisa que vai tornar você um cara muito prezado por todos os funcionários da sua empresa.

Antes do bloqueio vamos configurar o cache, para acelerar um pouco a navegação nos sites liberados. O cache e uma cópia do site que fica no disco do servidor, sendo assim depois de um primeiro acesso ao site, o proxy não precisa “pegar” na internet o site inteiro, apenas as modificações no mesmo.

Instalaremos assim o squid:

#apt-get install squid

Faremos o backup da configuração padrão

mv /etc/squid/squid.conf squid.conf.old

Depois iremos configura-lo:

#vim /etc/squid/squid.conf

Primeiro devemos saber que o squid pode funcionar em modo transparente ou em modo autenticado, eu prefiro o transparente, porquê evita de ter de configura-lo em cada equipamento.

Outra coisa que vamos configurar e a pasta onde ele irá fazer cache, e a politica de substituição dos arquivos no cache. Vamos configurar também as redes que o squid irá servir, alem de outras coisinhas que comentei na conf abaixo:

#Configuracao do proxy transparent na porta 4545
http_port 4545 transparent

#configuracoes default
#configuracao da acl para ips que estao na internet
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl purge method PURGE
acl CONNECT method CONNECT
#Portas que serao tratadas pelo Proxy
acl SSL_ports port 433 563 10000
acl Safe_ports port 80      # http
acl Safe_ports port 20      # ftp-data
acl Safe_ports port 21      # ftp
acl Safe_ports port 443 563   # https, snews
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 25          # pop
acl Safe_ports port 110         # smtp

        http_access allow purge localhost
        http_access deny purge
        http_access deny !Safe_ports
        http_access deny CONNECT !SSL_ports
#configuracao para funcionamento do squidGuard
redirect_program /usr/bin/squidGuard

#Permitindo acesso da rede local e negando para acessos externos
acl redelocal src 192.168.25.0/24
        http_access allow redelocal
        http_access deny manager !localhost
        http_access allow all
###CACHE###

#Tamanho do Cache na Memoria Ram
cache_mem 350 MB
maximum_object_size_in_memory 250 KB

#Tamanho do Cache em Disco

maximum_object_size 32 MB
minimum_object_size 0 KB

#Porcentagem de uso de Cache que faz o squid descartar
cache_swap_low 90
cache_swap_high 95

#localizacao e tamanho do cache em disco

cache_dir ufs /etc/squid/cache 10000 128 256
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280

Agora precisamos criar e dar permissão no diretório de cache:

#mkdir /etc/squid/cache

#chmod 777 /etc/squid/cache

Agora vamos instalar o SquidGuard, ele permite que usemos imensas listas de bloqueio sem a perda de desempenho do Squid. Vou colocar apenas os comandos para a configuração do mesmo, no site do guia do hardware você encontra um excelente tutorial , e o melhor que realmente funciona. O link está aqui http://www.hardware.com.br/tutoriais/filtro-conteudo-squidguard/ .

#apt-get install squidguard

#wget -c http://squidguard.mesd.k12.or.us/blacklists.tgz
#wget -c http://www.shallalist.de/Downloads/shallalist.tar.gz

#cp blacklists.tgz shallalist.tar.gz /var/lib/squidguard/db/

#cd /var/lib/squidguard/db/

#tar -zxvf blacklists.tgz

#tar -zxvf shallalist.tar.gz

#rm -f blacklists.tgz shallalist.tar.gz

Esses comandos permitiram que você instalasse o SquidGuard, baixa-se as listas de bloqueios, agora vamos configurar o squidGuard.conf

#vim /etc/squid/squidGuard.conf

dbhome /var/lib/squidguard/db
logdir /var/log/squid
src diretores {
#Aqui ficam os ips liberados
ip 192.168.25.100
ip 192.168.25.53
}
dest white {
domainlist white/domains
urllist white/urls
}
dest ads {
domainlist blacklists/ads/domains
urllist blacklists/ads/urls
}
dest aggressive {
domainlist blacklists/aggressive/domains
urllist blacklists/aggressive/urls
}
dest audio-video {
domainlist blacklists/audio-video/domains
urllist blacklists/audio-video/urls
}
dest drugs {
domainlist blacklists/drugs/domains
urllist blacklists/drugs/urls
}
dest gambling {
domainlist blacklists/gambling/domains
urllist blacklists/gambling/urls
}
dest porn {
domainlist blacklists/porn/domains
urllist blacklists/porn/urls
}
dest proxy {
domainlist blacklists/proxy/domains
urllist blacklists/proxy/urls
}
dest redirector {
domainlist blacklists/redirector/domains
urllist blacklists/redirector/urls
}
dest spyware {
domainlist blacklists/spyware/domains
urllist blacklists/spyware/urls
}
dest violence {
domainlist blacklists/violence/domains
urllist blacklists/violence/urls
}
dest warez{
domainlist blacklists/warez/domains
urllist blacklists/warez/urls
}
dest porn2{
domainlist BL/porn/domains
urllist BL/porn/urls
}
dest socialnet{
domainlist BL/socialnet/domains
urllist BL/socialnet/urls
}
dest tracker{
domainlist BL/tracker/domains
urllist BL/tracker/urls
}
acl {
diretores{
pass any
}
default {
pass white !ads !aggressive !audio-video !drugs !gambling !porn !proxy
!redirector !spyware !violence !warez !porn2 !socialnet !tracker all
redirect http://amcollucci.com.br
}

Agora vamos configurar a ACL white que criamos:

# mkdir /var/lib/squidguard/db/white
# touch /var/lib/squidguard/db/white/domains
# touch /var/lib/squidguard/db/white/urls

Agora vamos compilar as listas, e atribuir as permissões aos arquivos

# squidGuard -C all

# chown -R proxy:proxy /var/lib/squidguard/db/*

# find /var/lib/squidguard/db -type f | xargs chmod 644

# find /var/lib/squidguard/db -type d | xargs chmod 755

# squid -k reconfigure

Se você tiver seguido todos os passos corretamente, você agora estará rodando o squid, porem ainda falta uma coisinha temos de fazer o Firewall redirecionar para a porta do squid.

#vim /etc/init.d/firewall.sh
#!/bin/bash

        echo "Parando o forward pelo kernel"
        echo 0 > /proc/sys/net/ipv4/ip_forward

        echo "Iniciando o forward pelo kernel"
        echo 1 > /proc/sys/net/ipv4/ip_forward

echo "configurando rota default"
route add default gw ip_do_roteador_ou_modem

echo "configurando dns"

rm /etc/resolv.conf
echo nameserver 8.8.8.8  >>    /etc/resolv.conf

echo "Limpando todas as tabelas"

        iptables -F
        iptables -t nat -F
        iptables -t mangle -F

echo "criando liberacoes"

        iptables -P INPUT ACCEPT
        iptables -P OUTPUT ACCEPT
        iptables -P FORWARD ACCEPT
        iptables -t nat -P OUTPUT ACCEPT
        iptables -t nat -P PREROUTING ACCEPT
        iptables -t nat -P POSTROUTING ACCEPT

echo "liberando o loopback"

        iptables -A OUTPUT -p tcp --syn -s 127.0.0.1/255.0.0.0 -j ACCEPT
        iptables -A INPUT -i lo -j ACCEPT
echo "Criando a regra de NAT"
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
echo "Redirecionando para o Squid"

iptables -t nat -A PREROUTING -s 192.168.25.0/24 -p tcp --dport 80 -j REDIRECT --to-port 4545
iptables -t nat -A PREROUTING -s 192.168.25.0/24 -p udp --dport 80 -j REDIRECT --to-port 4545
echo "Iniciando o forward pelo kernel"
echo 1 > /proc/sys/net/ipv4/ip_forward

echo 'Firewall Amcollucci ok'
exit 0

O ip de vermelho deve ser alterado para o ip do seu modem.

Reinicie o seu firewall e pronto! Voi-lá seu server estará ok!

Até a Proxima!

Servidor Debian – Parte 3

Nessa parte do tutorial, não vamos dar duas dicas, que poderão ser úteis mais tarde. A primeira e para localizar um arquivo no linux:

Primeiro vamos instalar um programa que serve para localizar arquivos em nosso hd. Ele e o locate!

#apt-get install locate

Agora e so usar o comando updatedb para criar um banco de dados com todos os arquivos do computador.
Depois digitar locate para localizar qualquer arquivo.

A segunda dica, é de como criar alias, para os comandos. Para simplificar sua vida!

Daí faremos o seguinte vamos criar alguns alias, em /etc/profile, coloquei ai, e não no .bashrc, porque foi a unica forma que funcionou atraves do PUTTY.

Dai meu profile ficou assim:

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), …).

if [ “`id -u`” -eq 0 ]; then
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin”
else
PATH=”/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games”
fi
export PATH

if [ “$PS1” ]; then
if [ “$BASH” ]; then
# The file bash.bashrc already sets the default PS1.
# PS1=’\h:\w\$ ‘
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ “`id -u`” -eq 0 ]; then
PS1=’# ‘
else
PS1=’$ ‘
fi
fi
fi
#aqui o comando (atalho) fica a esquerda e o comando

#completo fica a direita
alias ls=’ls –color’
alias vi=’vim’

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi

A parte de vermelho são algumas aliases que eu criei, pode-se acrescentar mais se quiser, mas como e uma coisa bem pessoal deixo essa parte para quem for montar seu server.

Essa parte foi bem curtinha mesmo. Mas espero que tirem proveito dela.

Servidor Debian – Parte 2

Bom na Parte 1 desse tutorial eu expliquei como  instalar, configurar as placas de rede, e fazer o nat, que é nada mais do que pegar a internet e compartilhar ou tecnicamente , traduzir um endereço publico em privado.

Mas no exemplo acima ligando o roteador na eth0 e a eth1 em um switch, onde as outras estações estao conectadas. Seria necessário que fossêmos em cada estação configurar IP, Gateway, e DNS.

Mas como eu disse sou preguiçoso e outros técnicos também o são, e mesmo quando o tamanho da rede, não justifica, acho interessante usar o DHCP pra fazer as configurações por mim. Há uns 2 anos que não desenvolvo um novo script de DHCP, depois que eu li a seguinte matéria: http://vivaolinux.com.br/artigo/Debian-Lenny-DHCP3server-+-Bind9-adicionando-maquinas-automaticamente/

O artigo e excelente e funciona redondinho, portanto vamos segui-lo!

A partir de agora e legal se conectar ao servidor via putty. (Não sabe como aprenda aqui: http://www.inf.pucrs.br/ssh/putty/ )

O primeiro passo e instalar os pacotes Bind9 e DHCP3-Server:

# apt-get install bind9 dhcp3-server

Depois  devemos configurar a placa de rede no nosso caso a eth1 para responder as solicitações DHCP

# dpkg-reconfigure dhcp3-server

Agora voce deve parar os serviços de DHCP e BIND9

# /etc/init.d/dhcp3-server stop

# /etc/init.d/bind9 stop

Agora você deve configurar o dhcpd.conf, no caso eu estou colocando o range da rede 192.168.25.0 mas é só alterar!

#vim /etc/dhcp/dhcpd.conf

ddns-update-style interim;

ddns-updates on;

ddns-domainname “amcollucci.local”;

ddns-rev-domainname “25.168.192.in-addr.arpa”;

include “/etc/bind/rndc.key”;

zone amcollucci {

   primary 127.0.0.1;

   key rndc-key;

}  

zone 25.168.192.in-addr.arpa {

   primary 127.0.0.1;

   key rndc-key;

}

option domain-name “amcollucci.local”;

option domain-name-servers 192.168.25.254;

default-lease-time 600;

max-lease-time 7200;

authoritative;

log-facility local7;

subnet 192.168.25.0 netmask 255.255.255.0 {

 

#Aqui ficam o primeiro e ultimo ip da rede

   range 192.168.25.10 192.168.25.30;

   option routers 192.168.25.254;

}

Aqui nesse arquivo podemos fazer reservas dhcp mas isso e coisa pra outra história.

Agora vamos alterar o named.conf.local

#vim /etc/named.conf.local

include “/etc/bind/rndc.key”;

controls {

inet 127.0.0.1 port 953

allow {127.0.0.1;}

keys {“rndc-key”;};

};

zone “amcollucci.local” {

type master;

file “/etc/bind/db.teste”;

allow-update { 192.168.25.254;key “rndc.key”;};

};

zone “25.168.192.in-addr.arpa” {

type master;

file “/etc/bind/db.25.168.192.in-addr.arpa”;

allow-update { 192.168.25.254;key “rndc.key”;};

};

Agora vamos configurar o arquivo hosts pro servidor saber que ele é quem ele é..rs

#vim /etc/hosts

#ip FQDN Host

192.168.25.254        server.amcollucci.local     server

Agora vem os arquivos DB, que o Dhcp atualiza toda vez que atribui um ip:

# vi /etc/bind/db.amcollucci

$ORIGIN . $TTL 43200  ; 12 hours

amcollucci.local           IN      SOA      server.amcollucci.local.   root.amcollucci.local. (

                     1 ; serial

                     28800 ; refresh ( 8 hours )

                     14400 ; retry ( 4 hours )

                     3600000 ; expire ( 5 weeks 6 days 16 hours )

                     86400 ; minimum ( 1 day )

                     )

                NS            server.amcollucci.local.

$ORIGIN   amcollucci.local.

server    A                   192.168.25.254

E o Db do dns reverso!

$ORIGIN .

$TTL 43200 ; 12 hours

1                  IN           SOA           server.amcollucci.local.   root.amcollucci.local. (

1 ; serial

28800 ; refresh ( 8 hours )

14400 ; retry ( 4 hours )

3600000 ; expire ( 5 weeks 6 days 16 hours )

86400 ; minimum ( 1 day )

)

NS                    server.amcollucci.local.

$ORIGIN   25.168.192.in-addr.arpa.

1         PTR                        server.amcollucci.local.

Como nem o DHCP, nem o Bind rodam como root, temos de alterar as permissões dos arquivos na pasta BIND

# chmod g+w *

# chown -R root:bind *

Agora e simples, basta iniciar os serviços:

# /etc/init.d/bind9 start

#/etc/init.d/dhcp3-server start

Como vocês viram não posso chamas esse post como se ele fosse de autoria minha, dei credito logo em cima ao Cl2b2r, do vivaolinux! Mas eu integrei essa conf ao resto do meu server como vocês verão nos próximos posts. Agora eu vou ir que ainda nem almocei..rs

Servidor Debian – Parte 1

Esse é um tutorial, de como montar um servidor em Debian, que forneça vários serviços. Nesse caso específico, um serviço de Proxy, Firewall, Nat e Servidor de Arquivos. Esse tutorial mostra também como sou preguiçoso, já que nele coloco vários links que servem de referência para algumas tarefas!

Esse tutorial utiliza uma instalação limpa, e bem seca do debian, que é a Netinst mais detalhes sobre ela você pode conferir aqui: http://www.debian.org/distrib/netinst

Faça o Download de acordo com a sua arquitetura:

32Bits: http://cdimage.debian.org/debian-cd/6.0.2.1/i386/iso-cd/debian-6.0.2.1-i386-netinst.iso

64bits: http://cdimage.debian.org/debian-cd/6.0.2.1/amd64/iso-cd/debian-6.0.2.1-amd64-netinst.iso

Inicialize o computador pelo CD, sem o cabo de rede conectado. Durante a instalação serão feitas algumas perguntas, como Idioma e Layout de Teclado, Esquema de Particionamento, e Senhas de root e usuario. Caso tenha duvidas consulte esse excelente tutorial em: http://www.vivaolinux.com.br/artigo/Instalacao-do-Debian-GNU-Linux-Passo-a-passo

Depois disso o primeiro passo e configurar os dispositivos de Rede. Pois eles não terão sido configurados na Instalação já que iniciamos sem conexão a rede:

Para isso vamos conferir se as placas foram detectadas em /proc/net/dev

$ cat /proc/net/dev

Vai retornar algo como:

face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
lo:     240       4    0    0    0     0          0         0      240       4    0    0    0     0       0          0
eth0:616534700  453480    0    0    0     0          0         0 31123320  258867    0    0    0 40738     174          0

O importante aqui são as ethX, sedo que x é o numero da interface de rede. No exemplo acima, só existe a eth0, mas para esse tutorial e necessário que hajam 2 placas de rede instaladas no servidor. Uma vai ser a interface de rede externa e a outra a interface de rede interna.

Agora vamos a configuração:

Vou considerar que a placa de Rede Interna e a eth1 e a externa e a Eth0, e que você está usando um modem roteado, que é o mais comum por aqui.

#vi /etc/network/interfaces

no vi digite dd (duas vezes a letra d), para excluir as linhas que estão incluídas no arquivo.

depois digite a letra i, para poder começar a inserir um texto no arquivo.

#configuração da interface de loopback

auto lo
iface lo inet loopback

#configuração da interface externa
allow-hotplug eth0
auto eth0
iface eth0 inet dhcp

#configuração da interface interna
allow-hotplug eth1
auto eth1
iface eth1 inet static
address 192.168.25.254
net 192.168.25.0
netmask 255.255.255.0

Depois de digitar isso, pressione a tecla “esc”  para sair do modo de edição e digite “:wq” (write and quit) para sair e salvar.
Agora temos que configurar o sources.list, com os repositorios do debian, já que eles foram comentados durante a instalação.

# vi /etc/apt/sources.list

Ele deve ficar desse jeito:

deb http://debian.las.ic.unicamp.br/debian/ squeeze main
deb-src http://debian.las.ic.unicamp.br/debian/ squeeze main

deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main

deb http://volatile.debian.org/debian-volatile squeeze/volatile main
deb-src http://volatile.debian.org/debian-volatile squeeze/volatile main

dai, vamos atualizar tudo:

#apt-get update

#apt-get upgrade

Agora vamos instalar o ssh, pra facilitar a vida da gente:

#apt-get install ssh

E vamos aproveitar e instalar o “vim” que e o Vi Improved, muito mais facil de mecher!

#apt-get install vim

Agora vamos começar a compartilha a Internet via Iptables.

Para isso vamos criar um arquivo em /etc/init.d chamado firewall.sh, o nome não importa muito mas é bom usar um nome criativo desses pois facilita na hora de dar manutenção!

#touch /etc/init.d/firewall.sh

Vamos Fazer ele executar, e limitar as permissões:

#chmod 755 /etc/init.d/firewall.sh

#chmod +X /etc/init.d/firewall.sh

agora vamos edita-lo

vim /etc/init.d/firewall.sh

e insira isso:

#!/bin/bash

echo “Parando o forward pelo kernel”
echo 0 > /proc/sys/net/ipv4/ip_forward

echo “Limpando todas as tabelas”

iptables -F
iptables -t nat -F
iptables -t mangle -F

echo “criando liberacoes”

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
echo “liberando o loopback”

iptables -A OUTPUT -p tcp –syn -s 127.0.0.1/255.0.0.0 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

echo “Criando a regra de NAT”
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

echo “Redirecionando para o Squid”

#iptables -t nat -A PREROUTING -s 192.168.0.0/24 -p tcp –dport 80 -j REDIRECT –to-port 3128
#iptables -t nat -A PREROUTING -s 192.168.0.0/24 -p udp –dport 80 -j REDIRECT –to-port 3128

echo “Iniciando o forward pelo kernel”
echo 1 > /proc/sys/net/ipv4/ip_forward

echo ‘firewall MSTRADING ok’
exit 0

Vamos adicionar o script ao cron, para que assim que o computador iniciar, ele ser executado.

update-rc.d firewall.sh defaults

Agora vamos configurar o Bind9 + Dhcp3-server, eles irão fornecer os endereços ips,  e responder os nomes dos hosts na rede.

Mas isso vai ficar para a proxima parte… Tenho de sair urgente… rs

Empresas de Hosting e Telecomunicações

Esse e um daqueles posts que funcionam como um desabafo. Trabalho profissionalmente a 7 anos com informática, e sempre tive problemas com empresas se Hosting! Inclusive trabalhei em uma e lembro da insatisfação dos nosso clientes!

É incrível  num país onde cada vez mais pessoas tenham acesso a internet e a informação, as empresas se tornem cada vez piores. Eu tinha um sério problema com a Locaweb. Uma empresa que quer ser a maior do Brasil no ramo de hosting, mas que não consegue manter seus servidores estáveis um dia sequer, principalmente os de e-mail, nessa empresa quando você consegue falar com o suporte, eles te pedem para pingar o smtp, e o pop, dai quando você fala que já fez todos os testes o atendente fala que tem de fazer de novo com ele, tudo bem é procedimento, você pensa, dai quando ele fez todos os testes básicos ele te fala:” _ Bom parece que foi detectado um problema nos nossos servidores, abrirei um chamado na área técnica. ” Daí você se pergunta, poxa mas porquê não me encaminharam para alguém que pudesse realmente resolver meu problema.

Daí fui para a UOLHOST, nossa que maravilha eu pensei. Os servidores ficam pelo menos uns 90% up. Se não considerarmos lentidões temporárias! E igual um casamento é bom até a primeira briga… Ai começa a luta, você abre um chamado ” Socorro meus domínios estão fora do ar”, três dias depois recebe a resposta, “Acessamos os domínios mencionados mas não constatamos nenhum problema”, é a hora que você pensa, graças a Deus né!  Se tivessem encontrado um problema você estaria a 3 dias fora do ar.

Daí você ameaça a atendente, se meu site não estiver no ar em 1hora, veja bem 1hora… são 60 minutos 3600 segundos. Daí ela te responde pelo net call center 5 minutos depois. “Ok, senhor peço que aguarde o tempo necessário para o atendimento”, ou seja ela nem leu o que você falou, ela usou uma frase da lista-de-frases-padrão.

Dai você faz uma pesquisa no google para saber os concorrentes dessas empresas e vê que a maioria foi absorvida pela Uolhost, e que as concorrentes sérias não estão no Brasil. Quando você refina ainda mais a busca e começa a ter esperança. Aquele seu lado negro fala, não tem alguma coisa errada, será que essa empresa que eu encontrei na 120º pagina do Google e boa? Aí você se lembra do ReclameAQUI! E daí encontra a lista de reclamações contra aquela empresa.

Mas o problema não pára por aí, hoje em dia qualquer um que tenha internet, celular ou tv a cabo, ou os três, tem pelo menos uma história para contar , de atendimento ruim, ou desrespeito ao consumidor. Além das velhas cobranças indevidas.

Por exemplo a TIM, ótimas promoções, o difícil e o tempo que fica fora do ar. A oi/velox, tentando enganar a minha mãe com necessidade de provedor, vendendo planos de 600kbs pelo mesmo valor de um plano de 1mb em outra localidade…

Esse post não isenta as outras operadoras que isso fique claro!

Bom aqui termina meu desabafo, apesar de no fim não servir de nada…

Linguagem C – Parte 3 – Entrada de Dados

Bom agora é hora de começarmos a fazer o programa interagir de verdade com o usuário. Imagine o programa como um diálogo entre o operador (o usuário) e o programa. Funciona tipo assim:

Operador: Inicia o Programa

Programa: _ Entre com seus dados:

Operador: _ Sim claro ai estão eles…

Isso no programa fica assim.

Operador : da dois cliques no programa.

Programa: Printf(“entre com seus dados”);

Operador: Scanf(“c%”,&dados);

OBS.: Nessa etapa os programas ficarão mais complexos, e é bom que usem o dev c++ para irem testando eles.

1 – Tirar a media aritmética de 3 números inteiros.

Antes de fazer um programa e necessário entender o que ele vai fazer e como vai fazer.

A media aritmética de um conjunto de números e a soma deles dividido pela quantidade de números no conjunto.

Media = (Numero1 + numero2 +numero 3)/3 (quantidade de números)

Então nesse programa vamos precisar de 4 variáveis.

A primeira é o resultado da média que vai ser obtida. As outras 3 serão os números que o usuário deve inserir no programa.

O problema pede para tirar a media de 3 números inteiros. Então as 3 variáveis serão do tipo INT.

E o resultado será sempre inteiro?

Para responder a essa pergunta temos de pegar papel e lápis e fazer algumas contas.

Vamos pegar alguns números aleatórios

Media de 1, 6, 7

1+6+7 / 3 = 14/3 = 4,666… <- Não e numero inteiro

Media de 3, 5, 4

3+5+4 / 3 = 12 / 3 = 4 <- E numero inteiro.

Por isso a variável média não pode ser int, pois em alguns casos a variável vai receber resultados não inteiros. Por isso ela será FLOAT.

Sabendo disso agora podemos fazer o programa.


#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main(){

/* Declaração das variáveis.*/

int numero1,numero2,numero3;

float media;

/* Diálogo =D */

printf(&quot; Programa para Calculo de Media Aritmetica de 3 numeros inteiros \n&quot;);
printf(&quot; 1 Periodo Engenharia Mecanica _ Faculdade Anhanguera _ 2011  \n\n\n\n&quot;);
printf (&quot;Primeiro numero =  &quot;);

scanf (&quot;%d&quot;,&amp;numero1);

printf (&quot; \n \nSegundo numero =  &quot;);

scanf (&quot;%d&quot;,&amp;numero2);

printf (&quot; \n \nTerceiro numero =  &quot;);

scanf (&quot;%d&quot;,&amp;numero3);

/* Agora nosso programa faz a matemagica... */

media = (numero1+numero2+numero3)/3;
printf (&quot; \n \n A media dos números %d e %d e %d  e igual a %f  &quot;, numero1, numero2, numero3, media);

system(&quot;pause&quot;);
return 0;
}

Agora vamos comentar o programa linha a linha


#include &lt;stdio.h&gt;

#include &lt;stdlib.h&gt;

Essas linhas me permitiram usar os comandos printf, scanf, system.. Eles são as bibliotecas de entrada e saída e a padrão do DOS.


int main(){

Aqui eu inicio o bloco Main, o main e a principal função do programa, e tudo que estiver entre as chaves “{}”  dele são executadas quando a função main inicia.


/* Declaração das variáveis.*/

int numero1,numero2,numero3;

float media;

Aqui eu utilizo os comandos int e main para declarar as variáveis. Int declara variáveis inteiras (integer) e o float declara variáveis reais (ponto flutuante.).


/* Diálogo =D */

printf(&quot; Programa para Calculo de Media Aritmetica de 3 numeros inteiros \n&quot;);

printf(&quot; 1 Periodo Engenharia Mecanica _ Faculdade Anhanguera _ 2011  \n\n\n\n&quot;);

Inicia-se então a etapa onde eu vou inserir os dados, mas antes eu imprimo duas linhas que são o cabeçalho do programa. No final eu insiro 4 \n (new line) para descer o cursor e deixar o programa mais apresentável.


printf (&quot;Primeiro numero =  &quot;);

scanf (&quot;%d&quot;,&amp;numero1);

printf (&quot; \n \nSegundo numero =  &quot;);

scanf (&quot;%d&quot;,&amp;numero2);

printf (&quot; \n \nTerceiro numero =  &quot;);

scanf (&quot;%d&quot;,&amp;numero3);

Agora eu uso o printf para solicitar ao usuário que digite os números. Na linha logo abaixo eu uso o Scanf. O comando scanf fica esperando que o usuário digite um valor, e pressione enter, daí então ele joga o valor digitado na variável fora das aspas.

Ex.:


scanf (&quot;%d&quot;,&amp;numero1);

%d  = Decimal – usado quase sempre que utilizamos variáveis do tipo INT.

& = Prefixo obrigatório para poder setar (alterar) o valor de uma variável dentro do comando scanf.

Numero1 = variável.


/* Agora nosso programa faz a matemagica... */

media = (numero1+numero2+numero3)/3;

O programa agora faz a media aritmética, de três números ou seja ele soma os 3 e divide por 3, daí então o valor e atribuído à variável media.


printf (&quot; \n \n A media dos números %d e %d e %d  e igual a %f  &quot;, numero1, numero2, numero3, media);

Agora o printf vai exibir todos os valores. Os %d serão substituídos pelas variáveis numero1, numero2, numero 3, na ordem em que elas aparecem fora das aspas. E o %f será substuido pela 4º variável, usei o %f porque a variável média e do tipo float.


system(&quot;pause&quot;);

return 0;

Nossos velhos conhecidos, paralisando o processamento, e devolvendo 0 para a função int.


}

Fim do Bloco MAIN.