RSS

Samba - Listando máquinas através de redes roteadas

terça-feira, 6 de abril de 2010

Samba em 3 redes roteadas (VPN)

Servidor (smb.conf)
[global]
  workgroup = INTERNET         // Nome do grupo de trabalho
  server string = kyo                  //  Nome da maquina na rede
  interfaces = 192.168.0.255/255.255.255.0 192.168.1.255/255.255.255.0   192.168.2.255/255.255.255.0       // Interligando 3 redes
  name resolve order = wins bcast
  os level = 64
  preferred master = Yes
  domain master = Yes
  wins support = Yes
  remote announce = 192.168.0.255/INTERNET 192.168.1.255/INTERNET 192.168.2.255/INTERNET
  remote browse sync = 192.168.0.255 192.168.1.255 192.168.2.255  // ips das 3 redes

Filial 02 (smb.conf)
[global]
  workgroup = INTERNET
  netbios name = slackware01   
  server string = Samba slackware01
  interfaces = 192.168.2.0/24, eth1, 127.0.0.0/8
  os level = 32
  preferred master = Yes
  domain master = No
  dns proxy = No
  wins server = 192.168.0.1        // IP do servidor Samba (Matriz)

Filial 03 (smb.conf)
[global]
  workgroup = INTERNET
  netbios name = slackware03   
  server string = Samba slackware03
  interfaces = 192.168.3.0/24, eth1, 127.0.0.0/8
  os level = 32
  preferred master = Yes
  domain master = No
  dns proxy = No
  wins server = 192.168.0.1        // IP do servidor Samba (Matriz)
  

Squid - Libera range para acesso ao proxy.

Libera uma range de IP's da rede interna para acesso ao proxy. (Acesso Total)


acl faixa_adm src 192.168.0.10-192.168.0.50
http_access allow faixa_adm all

Liberado de: 192.168.0.10 à 192.168.0.50
 

Squid - Libera Acesso Específico para um Usuário

Proxy Transparente
Libera Acesso Específico para um Usuário.

acl sites_juliano url_regex -i "/usr/local/squid/etc/sites_juliano.txt"
acl juliano src 192.168.1.13
http_access allow sites_juliano juliano
http_access deny juliano all


Proxy Autenticado
Libera Acesso Específico para um Usuário.

acl sites_juliano url_regex -i "/usr/local/squid/etc/sites_juliano.txt"
acl juliano proxy_auth juliano
http_access allow sites_juliano juliano
http_access deny juliano all


sites_juliano.txt: Contem todos os sites que o usuario juliano pode acessar.

Tanto para proxy transparente como para autenticado primeiro se libera os sites necessários e depois o restante é bloqueado.
 

Squid - Restringindo o horário de acesso

Aqui é onde nós citamos outro tipo interessante de controle que nós podemos implementar em um escritório ou em um meio acadêmico: o controle por horário.

Para nós fazermos isto, nós fazemos o uso da ACL do tipo time.

acl horariopermitido time MTWHF 08:00-18:00
http_access deny !horariopermitido

Interpretando a regra fica assim: Ele vai negar o uso do proxy em todos os horários, COM EXCESSÃO do horário especificado na ACL horariopermitido.

O "MTWHF" na frente da ACL especifica os dias da semana conforme esta tabela:

    S - Sunday (Domingo) M - Monday (Segunda) T - Tuesday (Terça) W - Wednesday (Quarta) H - Thursday (Quinta) F - Friday (Sexta) A - Saturday (Sábado) 
     

Squid - Bloqueando extensões e downloads

Muitas pessoas se infectam com vírus contidos em arquivos de extensões conhecidas por conter programas maliciosos, como o .bat o .pif e o .scr.

Mas por incrível que pareça, você pode bloquear extensões que os seus usuários baixam no computador por meio de HTTP ou de FTP e de quaisquer outros protocolos que o Squid suporte, fazendo os seguintes passos:

touch /usr/local/squid/etc/extensoes.txt
chmod 755 /usr/local/squid/etc/extensoes.txt

Feito isto, você deve escrever as extensões que você quer bloquear da seguinte maneira no arquivo extensoes.txt.

\.com$
\.pif$
\.bat$
\.src$
\.zip$
\.exe$

NOTA: O "\" é um eliminador de metacaracteres e serve para cancelar a função do ".". Já o "$" serve para que seja analizado até o final de string.

Agora nós vamos adicionar a ACL no Squid que vai bloquear as extensões efetivamente, juntamente com o seu http_access:

acl extensoes urlpath_regex -i "/usr/local/squid/etc/extensoes.txt"
http_access deny extensoes all
 

Squid - Liberando acessos (sites)

Primeiro criamos o arquivo texto com a  lista de sites e damos à ele permissão de leitura:

touch /usr/local/squid/etc/liberados.txt
chmod 755 /usr/local/squid/etc/liberados.txt

Nele insira todas as sites que serão liberados. Adicione um site por linha.

Após, crie a ACL da seguinte maneira:
acl liberados url_regex -i "/usr/local/squid/etc/liberados.txt"

O parâmetro "-i" serve para que o Squid não distingua entre maiúsculas ou minúsculas.

E libere o acesso com o http_access:
http_access allow liberados all
  

IPTables - Criando chains Personalizadas.

Script que permite acesso total a rede.

hostsliberados.sh 

for x in `cat /root/hostsliberados.txt`
   do
        iptables -t nat -A preHostsLiberados -s $x -j ACCEPT
        iptables -t nat -A posHostsLiberados -s $x -j MASQUERADE
   done


hostsliberados.txt (Ips que serão liberados)
192.168.0.2
192.168.0.4
192.168.0.6

Regras
iptables -t nat -N preHostsLiberados
iptables -t nat -N posHostsLiberados
/root/hostsliberados.sh

iptables -t nat -A PREROUTING -j preHostsLiberados
iptables -t nat -A POSTROUTING -j posHostsLiberados
  

IPTables - Redirecionar conexões

Regra redireciona conexões que chegam na porta 8000 do servidor para a maquina 192.168.0.100 na porta 22.

iptables -t nat -A PREROUTING -p tcp --dport 8000 -j DNAT --to 192.168.0.100:22
 

IPTables - Criando regras com mac address

O IPTABLES é uma ferramenta de edição da tabela de filtragem de pacotes, ou seja, com ele você é capaz de analisar o cabeçalho (header) e tomar decisões sobre os destinos destes pacotes.

O módulo mac serve para conferir com o endereço Ethernet dos pacotes de origem. Somente faz sentido se usado nos chains de PREROUTING (da tabela nat) ou INPUT (da tabela filter). Aceita como argumento a opção --mac-source endereço. O símbolo "!" pode ser usado para especificar uma exceção.

iptables -A FORWARD -s 192.168.0.2 -m mac --mac-source xx:xx:xx:xx -j DROP

Bloqueia o acesso da maquina, 192.168.0.2.
  

Samba - Compartilhando Arquivos.

segunda-feira, 5 de abril de 2010

SAMBA

O SAMBA é um servidor e conjunto de ferramentas que permite que máquinas Linux e Windows se comuniquem entre si, compartilhando serviços (arquivos, diretório, impressão) através do protocolo SMB (Server Message Block)/CIFS (Common Internet File System), equivalentes a implementação NetBEUI no Windows. O SAMBA é uma das soluções em ambiente UNIX capaz de interligar redes heterogênea.

Abaixo uma configuração do samba onde:

\\servidor
-programas (Acesso apenas a leitura)
-musicas (Acesso Liberado)
-documentos (Solicitado um usuário e senha)

[global]
workgroup = (seu_grupo_de_trabalho)
netbios name = servidor
security = user
smb passwd file = /etc/samba/smbpasswd
encrypt passwords = yes
log level = 3
syslog = 1
log file = /var/log/samba/log.%m
os level = 99

[programas]
comment = Troca de Arquivos
path = /home/programas
read only = yes
writable = no

[musicas]
comment = Musicas
path = /home/musicas
read only = no
writable = yes
guest ok = yes
browseable = yes
create mask = 0777

[documentos]
comment = Documentos
path = /home/documentos
read only = no
writable = yes
guest ok = yes
browseable = yes
create mask = 0777
valid users = user1,user2,user3 #usuários que podem gravar.

E se preciso verifique as permissões de cada diretório:

ls -ialh /home/convidados
ls -ialh /home/documentos

Se necessário:  chmod a+wrtx /home/documentos
  

Instalação do ZABBIX

quinta-feira, 25 de março de 2010

O Zabbix é uma ferramenta com o objetivo de monitorar a performance e a disponibilidade de uma rede ou serviço, com suporte a banco de dados e interface web. 

Para a instalação do ZABBIX é necessário:
  • Apache;
  • MySQL (ou PostgreSQL);
  • MySQL ou PostgreSQL headers e libraries;
  • PHP4;
  • PHP GD module;
  • PHP 4.0 MySQL ou PostgreSQL module;
  • GNU Make;
  • NET-SNMP (ou UCD-SNMP) library e header files.  

Obtendo o Zabbix.
Antes de prosseguir, visite o site ZABBIX e verifique se existe alguma versão mais nova do mesmo. O Zabbix está disponível para o download em:
Versão instalada nesse artigo: zabbix-1.8.1.tar.gz  

Descompactando e Instalando (SERVIDOR). 
cd /usr/src/
tar xvfz zabbix-1.8.1.tar.gz
cd zabbix-1.8.1
./configure --with-mysql --with-net-snmp --enable-server --enable-agent

make install
mkdir /etc/zabbix
cp misc/conf/zabbix_server.conf /etc/zabbix/
cp misc/conf/zabbix_agentd.conf /etc/zabbix/
chown zabbix:zabbix /etc/zabbix/ -R


Configurando o Banco de Dados. 
mysql -u root -p
mysql> create database zabbix;
mysql> grant ALL on zabbix.* to zabbix@'localhost' identified by 'digite aqui sua senha';
Query OK, 0 rows affected (0.02 sec)
cd create/schema/
cat mysql.sql |mysql -u zabbix -p zabbix
Enter password:
cat ../data/data.sql |mysql -u zabbix -p zabbix
Enter password:
cat ../data/images_mysql.sql |mysql -u zabbix -p zabbix
Enter password:



Configurando os Daemons zabbix_server e zabbix_agentd 
Tratando-se de uma instalação pequena, não é necessário nenhum “tweaking” para ajustes de performance, nem no server nem no agentd. 

vi /etc/zabbix/zabbix_agentd.conf

Neste arquivo, a unica linha que precisa ser configurada neste momento é: 

server=127.0.0.1

Esta linha qual o IP de origem do monitoramento. (servidor). Como usaremos um agente e um servidor no mesmo computador, vamos colocar nosso próprio IP como Server.

Ajustando as configurações do banco de dados.

vi /etc/zabbix/zabbix_server.conf
   DBHost=localhost    DBName=zabbix   DBUser=zabbix     DBPassword=Sua Senha   

Ok, agora é a hora da verdade, vamos verificar se o agente e o servidor rodam corretamente:
 
zabbix_server
zabbix_agentd


Após executar estes dois comandos, digite: 

ps -aux |grep zabbix 

Ele deve mostrar várias instancias do zabbix_agentd e do zabbix_server rodando.
.

Roteamento - Load Balance


Nesta parte denominamos variáveis para as interfaces como segue.  Denominamos que o nome LAN seja referente à Interface ETH0 que no nosso script é a da rede interna. Verifique no seu Firewall qual é a interface correta.

IF_LAN='eth0'

Aqui denominamos as variáveis dos LINKS 1 e 2, e os chamamos de LINK1 e LINK2.  É claro que você poderá chamá-los do que quiser. Exemplo: ADSL1 e ADSL2, mas não esqueça de alterar as variáveis no restante do script.

IF_LINK1='eth1'
IF_LINK2='eth2'

Aqui colocamos os Gateways dos Links de Internet. Geralmente, os Default Gateways dos Links são os IP´S dos roteadores de Internet.

GW_LINK1='200.70.0.1'
GW_LINK2='200.80.0.1'

Nesta parte, utilizamos o comando IPTABLES para mascarar os IPs, ou seja,
fazemos um NAT (Network Address Translation) para que os pacotes que venham da Interface ETH0 com IPs da rede interna, ou mesmo pacotes gerados dentro do próprio Firewall, possam sair para a Internet com endereços trocados, usando os IPs das interfaces ligadas aos Links de Internet. O MASQUERADE ao final do comando faz exatamente isto. Caso contrário, utilizaria ACCEPT, mas aí os pacotes sairiam para a Internet com IPs da rede interna e jamais retornariam ao Firewall.

iptables -t nat -A POSTROUTING -o $IF_LINK1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $IF_LINK2 -j MASQUERADE


Aqui começamos a marcar os pacotes diferenciando-os pela porta utilizada.
Observe que escolhemos os pacotes com destino às portas 80 (HTTP) 443 (HTTPS) 25 (SMTP) 110 (POP). Todo pacote que passar pelo Firewall com estas particularidades receberão uma "marca", uma espécie de carimbo. Pacotes destinados à porta 80 recebem "carimbo" de número 2, pacotes com destino à porta 25 recebem "carimbo" número 3. Desta forma, podemos diferenciá-los para que mais à frente no script tenhamos controle do que saiu/entrou e por onde saiu/entrou.

iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 80 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 443 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 25 -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 110 -j MARK --set-mark 3



A diferença entre o PREROUTING e o OUTPUT é que, PREROUTING abrange os  pacotes que foram originados fora do FIREWALL, por exemplo Interface ETH0  ($IF_LAN), enquanto OUTPUT são os pacotes originados no Firewall, ou seja, na própria console.

iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 3
iptables -t mangle -A OUTPUT -p tcp --dport 110 -j MARK --set-mark 3


Aqui montamos as tabelas dinâmicas a partir das marcas (carimbos) que fizemos
lá em cima no nosso script. Pacotes que foram marcados com 2 vão para a tabela "table 20" e os marcados com 3, vão para a tabela "table 21", com a mesma prioridade. Perceba o PRIO 20 após os comandos.

ip rule add fwmark 2 table 20 prio 20
ip rule add fwmark 3 table 21 prio 20


Se quisermos condicionar esta marcação de outra forma, podemos utilizar o  comando das seguintes formas:

Este condiciona que todos os pacotes que vierem da rede 192.160.0.0 vão para a tabela 20.

ip rule add from 192.160.0.0/24 table 20

Este outro condiciona os pacotes da rede 192.170.0.0 a irem para a tabela 21.

ip rule add from 192.170.0.0/24 table 21

Agora sim daremos rumo aos pacotes que foram marcados e cadastrados na tabela dinâmica.  Veja que os pacotes que foram enviados para a tabela 20 têm como DEFAULT GATEWAY o LINK1. Sendo assim, os pacotes serão enviados para o LINK1 na Interface ETH1 com o IP 200.70.0.1.  Já os pacotes da tabela 21 serão enviados para o LINK2 na Interface ETH1, com o IP 200.80.0.1

ip route add default via $GW_LINK1 dev $IF_LINK1 table 20
ip route add default via $GW_LINK2 dev $IF_LINK2 table 21


Este último comando limpa a tabela, caso ela já tenha sido utilizada  anteriormente, ou apenas para termos certeza de que quando você resetar as  regras todas, o Firewall não guarde nenhum tipo de informação na memória (cache). Daí o nome FLUSH CACHE.

ip route flush cache

Habilitando e configurando RAID 1 no Slackware.


Considerações Iniciais

  •  Não há importância dos DISCOS serem de tamanhos DIFERENTES desde que as partições do RAID sejam EXATAMENTE DO MESMO TAMANHO.
  • Neste artigo vou considerar que é um sistema de alto desempenho e não pode parar, por isso o RAID 1 será para todas as partições, com exceção para a SWAP.
  • Considerando 2 discos de tamanho 80 GB e do tipo SATA (mas do mesmo modo funcionaria para discos IDE, somente alterando de "sd" para "hd" as instruções).
  • Vamos considerar também que os discos SATAs estejam ligados na 1º e 2º porta de conexão SATA, sendo "sda e sdb" respectivamente.

Sistema Operacional utilizado: Slackware 13

Devemos iniciar estas configurações antes mesmo de iniciar o setup de instalação do Slackware. Iniciamos o boot com o CD ou DVD do Slackware. No prompt de comando, a primeira operação será particionar os discos.

Configurando as Partições

Vamos agora particionar os discos, use para isso a sua ferramenta preferida, fdisk ou cfdisk.

Partições do disco 1:

* / - 79 GB - tipo "fd" (Linux Raid Autodetect)
* swap - 1 GB (depende do total de memória RAM disponível da (máquina)

Depois de criado este arranjo de partições, execute o seguinte comando para configurar o disco 2 com o mesmo padrão de particionamento.

sfdisk -d /dev/sda | sfdisk /dev/sdb

Não esqueça que estamos considerando que os HDs estejam na 1º e 2º porta de conexão SATA, sendo eles SDA e SDB.

 Montando o RAID 1

Depois das partições prontas, devemos agora montar as partições com o RAID escolhido, no nosso caso RAID 1.

Para isso iremos usar o comando "mdadm", que gerencia os diversos níveis de raid no Slackware.

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1

Esta sequência de comandos "associa/cria" 2 partições em "1", que será como o sistema interpretará.

Nesse caso, será criado o dispositivo "/dev/md0" com raid level 1, ou melhor, raid1, com 2 partições incluídas, sendo elas /dev/sda1 e /dev/sdb1.

O comando a seguir exibe mais detalhes do raid montado, no caso o comando abaixo exibirá detalhes do dispositivo /dev/md0, no qual estão incluídas as partições /dev/sda1 e /dev/sdb1.

mdadm -D /dev/md0
ou
cat /proc/mdstat

Depois de criado o raid para todas as partições criadas, poderemos executar o comando "setup" para iniciar a instalação do Slackware.


Depois do Sistema Instalado

Considerando que tenha feita uma instalação bem sucedida e tenha reiniciado e logado com sucesso no seu novo sistema.

Iremos agora adicionar as partições do RAID no arquivo de configuração do mdadm.conf, que é o arquivo que gerencia os arrays em funcionamento do sistema. Para isso, execute:

mdadm -D --scan >> /etc/mdadm.conf

Quase tudo pronto, agora iremos editar o arquivo /etc/lilo.conf para configurações de boot corretas.

Abra o arquivo /etc/lilo.conf com seu editor de texto preferido.

Altere as seguintes opções para ficar assim:

boot = /dev/md0
raid-extra-boot = mbr-only #Isso irá gravar o lilo nos dois hds
root = /dev/md0


Após isso, salve e execute o comando:

lilo

Não deve exibir nenhum erro quanto a esta configuração. Pronto, neste momento seu sistema RAID já está funcionando com sucesso.
.

Autenticando e protegendo diretórios no Apache

quarta-feira, 24 de março de 2010

 
Comece criando o arquivo de senhas para autenticar os usuários que terão acesso aquela área, com o comando:

# htpasswd -c /var/www/htdocs/suporte/.htpasswd suporte

Foi criado o arquivo .htpasswd dentro da pasta suporte, mas você pode criar onde desejar. A linha acima cria o arquivo e já adiciona o usuário suporte. Após este comando ele ira pedir uma senha e a confirmação da mesma, feito isso, você deve editar o arquivo httpd.conf dentro de "/etc/httpd/httpd.conf" e adicionar as seguintes linhas:

Directory "/var/www/htdocs/suporte"
AllowOverride None
Options Indexes MultiViews
Order allow,deny
Allow from all
AuthType Basic
AuthName "Digita a senha de acesso: "
AuthUserFile "/var/www/htdocs/suporte/.htpasswd"
Require user suporte
Directory


Altere, se necessário a linha “AuthUserFile” para o diretório onde você colocou seu arquivo de senhas. Para mais de um usuário, coloque "Require valid-user" ao invéz de “Require user” para autenticar mais de um usuário. Pronto, basta salvar e reiniciar o apache.

Redundância de link

 
Mapa de rede do exemplo utilizado:

-------------------------------------
eth0 -> ip = 192.168.0.100
.............gw = 192.168.0.254

eth2 -> ip = 192.168.1.100
.............gw = 192.168.1.254
------------------------------------


Inicialmente, deve-se criar duas rotas, sendo “LINK1” e “LINK2” em:

/etc/iproute2/rt_tables

As regras abaixo, define quais redes fazem parte das tabelas criadas:

ip route add 192.168.0.0 dev eth0 src 192.168.0.100 table LINK1
ip route add default via 192.168.0.254 table LINK1

ip route add 192.168.1.0 dev eth2 src 192.168.1.100 table LINK2
ip route add default via 192.168.1.254 table LINK2

Para que a maquina tenha 02 gateway, ou seja 02 rotas default, deve-se inserir as regras:

ip rule add from 192.168.0.254 table LINK1
ip rule add from 192.168.1.254 table LINK2

E por fim, deve-se inserir a regra para definir os 02 gateway:

ip route add default scope global nexthop via $G1 dev $IF1 weight 1 nexthop via $G2 dev $IF2 weight 1

Instalando MYSQL no Slackware 13


Download mysql-5.0.84: Clique aqui.

Instalação: installpkg mysql-5.0.84-i486-1.txz

MySQL instalado. Criando o database:
# mysql_install_db

Setar a senha de root, mas para isso precisamos iniciar o mysql.
# safe_mysqld &

Vai dar um erro, é normal. E preciso para gerar o sock. Agore mude a permissão:
# chown -R mysql.mysql /var/lib/mysql

Tentaremos novamente executar o server mysql:
# safe_mysqld &

MySQL rodando. Mudar a senha de root:
# mysqladmin -u root password (SUA SENHA AQUI)

Logue-se ao mysql:
# mysql -u root -p