Projeto PassWD.linuxhd.com.br

Iniciou-se hoje o projeto PASSWD, tal projeto visa estudar o comportamento de geração de senhas de acordo com seus tamanhos afim de chegar à um padrão e uma estatisticas de letras, numeros e caracteres especiais mais usados.

Este é o primeiro de muitos projetos que serão postados em linuxhd.com.br, assim que concluir tal projeto, pretendo inciar um que auxiliara muito aos administradores de proxies, mas isso será só pra mais tarde, por enquanto gostaria apenas de contar com a colaboração dos senhores.

http://www.linuxhd.com.br/

Comandos PHP

Estou em uma nova fase, desenvolvendo em PHP, me aventurando criando páginas e tals e vou postar aqui alguns comandos interessantes sobre php:

1- Banco de dados

a) Conetar-se ao banco
$servidor="localhost:3306";
$dbname="banco-local"; // Indique o nome do banco de dados que será aberto
$usuario="adm-banco-local"; // Indique o nome do usuário que tem acesso ao banco
$password="senha-adm-banco-local"; // Indique a senha do usuário
$conexao=mysql_connect($servidor,$usuario,$password); //estabelecendo conexão
if(!mysql_select_db($dbname,$conexao))
	echo "Nao Conectou";
else{
	echo "Conectou";
	mysql_close($conexao); // Fechando conexão
}

b) Acesso ao banco de dados
//Gerar a string com o comando SQL(INSERT INTO...,SELECT FROM...,UPDATE...), no caso abaixo "SELECT";
$buscar_nome="Fulano"
$string_select = "SELECT nome,telefone FROM Agenda WHERE BINARY nome = \"".$buscar_nome."\";";
//Utilizar o comando mysql_query($string_com_comando_sql) redirecionando sua saida para uma variavel;
$resultado = mysql_query($string_select);
//Ler a variavel do vetor assossiativo gerado onde os campos no SELECT(nome,telefone) são os indices;
while($linha = mysql_fetch_array($resultado))
{
       $nome=$linha["nome"];
       $telefone=$linha["telefone"];
       echo "Nome: ".$nome." Telefone: ".$telefone."
; } //Retorno: //"Nome: Fulano de A Telefone: 3333-3333" //"Nome: Fulano de B Telefone: 4444-4444" //"Nome: Fulano de C Telefone: 5555-5555"

No caso de inserir os dados basta voce apenas executar o mysql_query($string_com_comando_sql).

2- Strings

a) Concatenando String
$strA="Exemplo";
$strB="de";
$strC="concatenação";

$frase=$strA." ".$strB." ".$strC;
echo $frase
//Retorno: "Exemplo de concatenação"

b) Tamanho da string
$strA="KludgeLinux";
$tamanho=strlen($strA);
echo $strA." possui ".$tamanho." caracteres";
//Retorno: "KludgeLinux possui 11 caracteres"

c) buscando substring(é case sensitive, ou seja, há diferenca entre linux e Linux);
$strA="KludgeLinux, soluções provisoriamente definitivas";
$chave="linux";
if(preg_match("\"".$chave."\"", $strA))
{
         echo "a palavra: ".$chave." foi encontrada em ".$strA;
}
else
{
         echo "a palavra: ".$chave." nao foi encontrada em ".$strA;
}
//Retorno: "a palavra: linux nao foi encontrada em KludgeLinux, soluções provisoriamente definitivas"

3- Vetores

a) SIMPLES
$vet=array(1, 2, 3, 4, 5);
print_r(array);
//Retorno: "Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )"
echo $vet[4];
//Retorno: "5"

b) ASSOCIATIVOS
$vet=array("primeiro" => 1, "segundo" => 2, "terceiro" => 3, "quarto" => 4, "quinto" => 5);
foreach($vet as $indice => $valor)
{
       echo "Posicao: ".$indice." Conteudo: ".$valor."
"; } //Retorno: //Posicao: primeiro Conteudo: 1 //Posicao: segundo Conteudo: 2 //Posicao: terceiro Conteudo: 3 //Posicao: quarto Conteudo: 4 //Posicao: quinto Conteudo: 5 c) ORDENAÇÃO sort($vetor); //Retorno: Vetor ordenado por valor

Comando route

Senhores, esse é apenas um pequeno lembrete, tive um problema no meu trabalho e aprendi coisas que não sabia, logo, para não cair no esquecimento…segue abaixo:

Cenário: Uma rede interna(ntw:192.168.1.0/25, gw:192.168.1.1) deveria deveria acessar a intranet em outra rede local(ntw:172.16.0.0/12, gw:172.16.55.1) e a internet por outra rede que era provedora da internet(ntw:192.168.200.0/24, gw:192.168.200.1)
eth0 -> INTERNET, eth1 -> INTRANET, eth2 -> LAN
Solução:

1- Verifiquei as rotas de saida

# route
Tabela de Roteamento IP do Kernel
Destino         Roteador        MáscaraGen.    Opções Métrica Ref   Uso Iface
172.16.55.0     *               255.255.255.0   U     0      0        0 eth1
192.168.200.0   *               255.255.255.0   U     0      0        0 eth0
192.168.60.0    *               255.255.255.0   U     0      0        0 eth2
default         192.168.100.1   0.0.0.0         UG    0      0        0 eth1
default         192.168.200.1   0.0.0.0         UG    0      0        0 eth0

2- Removi a rota padrao 192.168.100.1 para que o padrão fosse o acesso para a interent

# route del default

3- E redirecionei o acesso à rede da intranet pela interfaçe responsável pelo contato dela:

# route add -net 172.16.0.0/12 gw 172.16.55.1 dev eth1

Tá feito, funfou perfeitamente, verificando as alterações na table de rotas:

# route
Tabela de Roteamento IP do Kernel
Destino         Roteador        MáscaraGen.    Opções Métrica Ref   Uso Iface
172.16.55.0     *               255.255.255.0   U     0      0        0 eth1
192.168.200.0   *               255.255.255.0   U     0      0        0 eth0
192.168.1.0     *               255.255.255.0   U     0      0        0 eth2
172.16.0.0      172.16.55.1     255.240.0.0     UG    0      0        0 eth1
default         192.168.200.1   0.0.0.0         UG    0      0        0 eth0

é isso… 😉

Squid com autenticação no AD ou LDAP

Senhores, eis um assunto muito util para quem trabalha adminsitrando uma rede coorporativa. Autenticação, em se tratando de segurança da informação, é alto essencial, logo, vamos trabalhar com a autenticação no squid utilizando bases de dados no AD e também no LDAP.
Não é um bixo de sete cabeças, havendo o AD/LDAP configurados, o squid é facil:

1- Abra o arquivo /etc/squid/squid.conf e insira na linha 1818 o codigo abaixo de acordo com seu ambiente:
#—Autenticação em AD—#

auth_param basic program /usr/lib/squid/ldap_auth -R -b dc=MEU DOMINIO,dc=EXTENSAO -D ADMINISTRADOR@MEUDOMINIO.EXTENSAO -w SENHA_ADMINISTRADOR -f sAMAccountName=%s -h SERVIDO_AD
ou
auth_param basic program /usr/lib/squid/ldap_auth -R -b dc=MEU DOMINIO,dc=EXTENSAO -D cn=ADMINISTRADOR AD,cn=GRUPO DE USUARIOS,dc=MEUDOMINIO,dc=EXTENSAO -w SENHA ADMINISTRADOR AD -f sAMAccountName=%s -h SERVIDOR AD

#–Autenticação em LDAP–#

auth_param basic program /usr/lib/squid/ldap_auth -b ou=GRUPOPRINCIPAL,ou=GRUPOSEGUNDARIO,dc=DOMINIO,dc=EXTENSAO -v3 -f "(uid=%s)" -H ldap://SERVIDOR LDAP

2- Após configurar onde será autenticada sua base insira outras diretivas sobre a autenticação

auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

3- Até este ponto o navegador ainda não pedirá a autenticação, logo iremos inserir a solicitação de autenticação:

acl usuarios proxy_auth REQUIRED

4- Procure a linha e altere como está abaixo:

antes: http_access allow ACL-REDE-LOCAL
depois: http_access allow usuarios ACL-REDE-LOCAL allow

e é isso, agora seja feliz, qualquer duvida há mais informações em http://www.vivaolinux.com.br/

Várias páginas em um mesmo servidor Apache2

To fazendo esse post para me lembrar do que fiz e como fiz após ralar muito para achar um manual simples sobre esse assunto, então sem lero lero, vamos lá:

1- Instale o apache2

# apt-get install apache2

2- Verifique se está funcionando, acesse pelo navegador o endereço http://127.0.0.1/ e deverá aparece uma página com a frase abaixo:

It works!

Vá ao diretório /etc/apache2/sites-available/, lá haverá 2 arquivos: default e default-ssl, o primeiro é responsável por responder às requisições que entram pela porta 80(http) e o segundo responde as requisições 443(https).

3- Copie o arquivo default com o nome do seu endereço:

# cp default meusite1.meudominio.com.br

4- Abra o arquivo meusite1.meudominio.com.br e altere as linhas abaixo:

ServerName meusite1.meudominio.com.br
ServerAdmin meusite1@meudominio.com.br
DocumentRoot /var/www/meudominio/meusite1/

As linhas alteradas acimas correspondem respectivamente à: email que será exibido em caso de página não encontrara ou algum erro e o diretorio onde estará localizado os arquivos da página.

5- Crie o diretório onde ficará os arquivos assim como especificado anteriormente:

# mkdir -p /var/www/meudominio.com.br/meusite1/

6- Crie um arquivo index.html dentro da pasta criada, para efetuarmos os testes posteriormente:

echo "MEUSITE1.MEUDOMINIO.COM.BR" > /var/www/meudominio.com.br/meusite1/index.html

Repita a partir do procedimento 3 para inserir quantas páginas desejar, alterando os campos necessários

7- Ative os sites com o seguinte comando, nesse caso ativei 2 sites:

# a2ensite meusite1.meudominio.com.br
# a2ensite meusite2.meudominio.com.br

*para desativar utilize a2dissite*
o nome usado deve ser igual ao do arquivo criado no procedimento 3, caso contrário o comando não aceitara, caso ele for habilitado, irá aparecer uma mensagem semelhante à esta após cada comando executado:

Enabling site meusite.meudominio.com.br
Run '/etc/init.d/apache2 reload' to activate new configuration!

8- Siga o procedimento mencionado na mensagem acima e pronto, fizemos o mais fácil, agora, façamos o mais fácil ainda.

9- Edite o arquivo /etc/hosts e associe o ip de seu servidor aos nomes criados:

127.0.0.1 meusite1.meudominio.com.br meusite1
127.0.0.1 meusite2.meudominio.com.br meusite2

Agora sim, tá feito! Acesse o navegador e digite meusite1.meudominio.com.br irá aparecer

MEUSITE1.MEUDOMINIO.COM.BR

e no seguinte irá aparecer o index.html criado para o meusite2.

Have some fun! 😉

Configurar Squid

Abaixo segue a configuração básica para um squid funcionar, claro, isso é apenas um exemplo, mas a melhor forma de voce aprender a usar o squid é LENDO O SQUID.CONF ORIGINAL, lá contem tudo o que você precisa para configurar descrevendo o que cada comando faz e dando exemplos.

Segue abaixo meu squid.conf

##-- CONFIGURACOES BASICAS
http_port 3128
visible_hostname servidor-proxy
cache_mgr email@administrador.com
##-- FIM CONFIGURACOES BASICAS 


##-- CONFIGURACOES DA CACHE 
cache_mem 64 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 1024 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid/ 300 16 256
cache_access_log /squid/var/logs/access.log
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280
##-- FIM CONFIGURACOES DA CACHE  

##-- LISTA DE ACL's
#-REDE
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 redelocal src 192.168.10.1/24
#-PORTAS
acl SSL_ports port 443          # https
acl SSL_ports port 563          # snews
acl SSL_ports port 873          # rsync
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl Safe_ports port 631         # cups
acl Safe_ports port 873         # rsync
acl Safe_ports port 901         # SWAT
acl Safe_ports port 1025-65535  # portas altas
acl purge method PURGE
acl CONNECT method CONNECT
#-METODOS
acl purge method PURGE
acl CONNECT method CONNECT
#- BLOQUEIOS
acl bloqueios url_regex -i "/squid/etc/regras/bloqueios.txt"
##-- FIM LISTA DE ACL's

##-- PERMISSOES DAS ACL's
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
#- BLOQUEIOS 
http_access deny bloqueios
#- REDE
http_access allow localhost
http_access allow redelocal
http_access deny all
##-- FIM PERMISSOES DAS ACL's

Antes de iniciar o squid, crie a cache do squid:

# squid -z

Crie o diretório e o arquivo de páginas bloqueadas:

# mkdir /etc/squid/regras
# touch /etc/squid/regras/bloqueios.txt

Inicie o servido do squid:

/etc/init.d/squid start

Tá feito!

Ip Virtual com KeepAlived

Pessoas, hoje irei demonstrar a configuração dessa ferramente que é muito util para quem trabalha com Alta Disponibilidade, servidores balanceados e coisas afins: O KeepAlived(www.keepalived.org).
Essa ferramenta funciona da seguinte forma: É definido um IP VIRTUAL que irá esta configurado em todas as máquinas, tais máquinas possuem um valor que definem sua prioridade em ordem decrescente em uma fila, ou seja, quanto maior o valor, mais adiante da fila essa máquina se encontra. A máquina com maior prioridade é responsável por “RESPONDER” as requisições enviadas para o IP VIRTUAL, caso essa máquina tenha algum a falha, a próxima máquina da fila assume tal responsabilidade, e assim por diante.

Entendido a bagaça, vamos pro que interessa, a configuração.

Vamos supor que nossa rede é 192.168.100.0/24, logo definimos
IP VIRTUAL: 192.168.100.1
SERVIDOR01: 192.168.100.101
SERVIDOR02: 192.168.100.102
SERVIDOR03: 192.168.100.103

1- Instale o KeepAlived em todas as máquinas que você deseja:

# apt-get install keepalived

2- Edite o arquivo /etc/keepalived/keepalived.conf no SERVIDOR01

# vi /etc/keepalived/keepalived.conf 
vrrp_instance VI_1 {
   interface eth0
   state MASTER
   virtual_router_id 51
   priority 101
   virtual_ipaddress {
   192.168.100.1
   }
}

3- Repita tal ação em SERVIDOR02 e SERVIDOR03 servidores alterando o campo priority(102 e 103 respectivamente) e verificando sempre a interface de rede está da mesma faixa de rede do ip virtual.

4- Reinicie o serviço:

# /etc/init.d/keepalived stop
# /etc/init.d/keepalived start

5- Verifique no servidor com maior prioridade(neste caso seria o SERVIDOR03) se está tudo funcionando com o comando abaixo:

# ip addr sh eth0

Deve aparecer algo parecido com:

1: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 78:e7:d1:55:6c:af brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.103/24 brd 172.25.12.255 scope global eth1
    inet 192.168.100.1/32 scope global eth1
    inet6 fe80::7ae7:d1ff:fe55:6caf/64 scope link 
       valid_lft forever preferred_lft forever

*nos outros servidores tal informação não irá aparecer, mas para fazer testes, desligue o SERVIDOR03 e em seguida efetue o procedimento 5 no SERVIDOR02.

É isso ae… espero ter ajudado…

Recuperar senha do MySQL

Pois é né!? Aconteceu comigo tambem, probleminha chato, mas as vezes acontece, então vamos lá, recuperar a senha desse banco de dados.

1- Pare o daemon do MySQL:

# killall mysqld 

2- Inicie o MySQL em modo seguro:

# mysqld_safe --skip-grant-tables & 

3- Acesse o banco de dados e defina o banco ‘mysql’:

 # mysql 
 > use mysql; 

4- Agora vamos definir a nova senha para o usuário root do MySQL:

 > update user set password = password('digite sua nova senha aqui') where user='root' and host='localhost'; 

5- Não esqueça de recarregar os privilégios, digitando:

 > flush privileges; 

6- E saia do cliente MySQL:

 > quit 

7- Reinicie o servico e pronto:

 # /etc/init.d/mysqld restart 

Tá feito! Aproveitem!

Instalando wordpress

Blogs, hoje em dia quase todo mundo tem um, é um dos principais meios de comunicação pela internet, noticias, fofocas, dicas, novidades, entretenimento, quase tudo é encontrado blogs. Logo nada melhor que criar um servidor com wordpress instalado para você personalizar o seu próprio blog, então seguimos abaixo:

Será necessario PHP5, Apache2, MySQL e o próprio WordPress.

1- Instale o PHP5,  Apache2  e o MySQL e um modulo adicional para comunicação php-mysql

# apt-get install apache2 php5 mysql-server php5-mysql

*será solicitada uma senha para o usuário root do mysql, insira uma senha sem medo de ser feliz

2- Habilite alguns modulos do apache2.

# a2enmod rewrite
# a2enmod php5

3- Acessando mysql, criando banco de dados e atribuindo permissões

# mysql -u root -p

*senha que foi inserida na instalação

mysql> CREATE DATABASE `wordpress`;
mysql> GRANT ALL PRIVILEGES on `wordpress`.* to 'root'@localhost  IDENTIFIED BY '<senha do root>';
mysql>\q

4- Edite o arquivo default do sites disponiveis do apache

# vi /etc/apache2/sites-available/default

busque as linhas abaixo e deixe como o exemplo abaixo:

antes:DocumentRoot /var/www/ <Directory /var/www>

depois:DocumentRoot /var/www/wordpress/ <Directory /var/www/wordpress/

Configure o mysql para ouvir conexões externas 5- Edite o arquivo de configuração do mysql

# vi /etc/mysql/my.cnf

6- Comente a linha abaixo:

antes:bind-address  = 127.0.0.1

depois:#bind-address = 127.0.0.1

7- Baixe o wordpress e descompate-o em /var/www/

# cd /var/www/
# wget http://wordpress.org/latest.tar.gz
# tar -zxvf latest.tar.gz

8-Reinicie todos os serviços

# /etc/init.d/apache2 restart
# /etc/init.d/mysql restart

Pronto, agora é so acessar http://<ip-do-servidor>/ e segui as instruções.

Configurando interface de rede

Para configurarmos as interfaces de rede devemos ter em mente quais interfaces estão conectadas, qual será a LAN e a WAN e a faixa de rede, nesse post irei considerar que meu servidor contém 2 interfaces:  eth0(WAN) e eth1(LAN) onde esta última faz parte de uma rede 192.168.1.0/24.

1- Edite o arquivo de configuração das interfaces

# vi /etc/network/interfaces

geralmente nesse arquivo já está configurado o loopback com a seguinte linha abaixo:

auto lo
iface lo inet loopback

a primeira interface(eth0) está conectada à uma rede que possui um servidor DHCP distribuindo IP’s logo, vamos configura-la para pegar um ip desse servidor e  a segunda inferface(eth1)  será um ip estático conectado à outro componente de rede, seja um switch, um roteador, um hub ou outro computador mesmo:

2- Insira as linhas abaixo no final do arquivo:

#WAN - DHCP
auto eth0
iface eth0 inet dhcp

#LAN - 192.168.1.0/24
auto eth1
iface eth1 inet static
address 192.168.1.10
netmask 255.255.255.0
network 192.168.1.0
gateway 192.168.1.1

3 – Salve o arquivo e execute os comandos:

# ifdown eth0; ifup eth0
# ifdown eth1; ifup eth1

Pronto, agora verifique se as configurações estão funcionando digitando:

# ifconfig | grep -i "inet addr"

e deverá aparecer algo como:

inet addr: xxx.xxx.xxx.xxx   Bcast: yyy.yyy.yyy.yyy    Mask: zzz.zzz.zzz.zzz
inet addr: 192.168.1.10      Bcast: 192.168.1.255     Mask:255.255.255.0
inet addr: 127.0.0.1 Mask: 255.0.0.0

Onde a primeira linha será sua eth0, ou seja, sua WAN que pegou o ip(xxx.xxx.xxx.xxx) automaticamente, as outras configurações são definidas pelo servidor DHCP. A segunda linha é sua eth1, que é sua LAN com ip estático definido por você, 192.168.1.10 e a mascara de rede identificando que ela é */24, e por último, seu loop back.